powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
25 сообщений из 34, страница 1 из 2
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627308
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, почему вот такая запись выдает ошибку?:
'Select MIN(Холодная_Вода) from счет limit 4';
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627330
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32,

http://segfault.kiev.ua/smart-questions-ru.html#goal Если вы пытаетесь разобраться, как что-либо сделать (а не сообщаете об ошибке), начинайте с описания цели. И только потом описывайте конкретный шаг на пути к ней, который вы не смогли выполнить.У вас запрос бессмысленный. Вот такое
Код: sql
1.
select min(...) from ...

выдаст только одну (или ни одной) записи. Зачем вы добавляете "лимит 4"? Может, имели в виду order by 1 limit 4, и без минимума?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627341
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Источник показанной ошибки скорее всего - кириллица.
Но и сказанное выше - в полный рост.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627351
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirЖеня32,

http://segfault.kiev.ua/smart-questions-ru.html#goal Если вы пытаетесь разобраться, как что-либо сделать (а не сообщаете об ошибке), начинайте с описания цели. И только потом описывайте конкретный шаг на пути к ней, который вы не смогли выполнить.У вас запрос бессмысленный. Вот такое
Код: sql
1.
select min(...) from ...

выдаст только одну (или ни одной) записи. Зачем вы добавляете "лимит 4"? Может, имели в виду order by 1 limit 4, и без минимума?

Например, в таблице имеется 10 записей, 1 записи = 1 месяц.
Чтобы узнать расход(пусть это будет счетчик холодной воды) за три месяца, нужно вычислить разницу между наибольшем и наименьшим показанием счетчика за четыре меся. Вот и возникает вопрос, как узнать наибольшие и наименьшее значения столбцов, последних четырех записей?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627356
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaИсточник показанной ошибки скорее всего - кириллица.
Но и сказанное выше - в полный рост.

А почему тогда так работает?:
'Select Холодная_Вода from счет where Дата in (SELECT top 4 Дата from счет ORDER BY Дата DESC)'
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627378
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32,

select MAX(cold_water)-MIN(cold_water) FROM table WHERE date>=дата_начала AND date<=дата_конца
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627379
tanglirвыдаст только одну (или ни одной) записи. агрегатный запрос без GROUP BY выдает всегда ровно одну строку, даже если его построить по пустой таблице...
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627388
Женя32А почему тогда так работает?:
'Select Холодная_Вода from счет where Дата in (SELECT top 4 Дата from счет ORDER BY Дата DESC)'Потому что это совсем другой, а главное - синтаксически верный - запрос.

З.Ы.
Когда придумываешь свой синтаксис он, чаще всего, не работает...
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627389
tanglir Может, имели в виду order by 1 limit 4, и без минимума?ТС хочет из 4-х каких попало строк выбрать ту, которая минимальна. Ты же предлагаешь ему выбрать 4-ре строки с минимальным значением. Думается, это немного разные вещи
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627393
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapokЖеня32,

select MAX(cold_water)-MIN(cold_water) FROM table WHERE date>=дата_начала AND date<=дата_конца
Дело в том, что начальная и конечная дата не фиксированные...
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627432
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32как узнать наибольшие и наименьшее значения столбцов, последних четырех записей?ну вот это уже ближе к правде
Код: sql
1.
2.
3.
4.
5.
6.
select max(a),min(a)
from (
 select значение as a from откуданибудь 
 where чегототам
 order by дата limit 4
) t1
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627454
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32chabapokЖеня32,

select MAX(cold_water)-MIN(cold_water) FROM table WHERE date>=дата_начала AND date<=дата_конца
Дело в том, что начальная и конечная дата не фиксированные...

Не фиксированные на этапе компиляции или на этапе выполнения? Если на этапе выполнения - значит, вы неверно обьяснили что вам нужно. Возможно даже вы сами недоконца понимаете что хотите. Что значит не фиксированные? Как можно выбрать разницу показаний по непонятно_каким месяцам?

Если на этапе компиляции - то это нормально. Значит на этапе выпонения начало и конец известны, вот и конструируете нужный запрос и выполняете его.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627457
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokКак можно выбрать разницу показаний по непонятно_каким месяцам?ну почему же "непонятно каким"? по последним четырём на текущий момент.
вот думаю, рассказывать ТСу о том, что показания могут быть ошибочными (и его метод расчёта накрывается медным тазом), или нет? :)
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627612
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32А почему тогда так работает?Попробуй ответить на простой вопрос - где именно на длинном пути передачи запроса от приложения к серверу возникла ошибка. На какой стадии...
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38627664
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirпо последним четырём на текущий момент.

SELECT MAX(cold_water)-MIN(cold_water) FROM (select cold_water FROM table ORDER BY date DESC LIMIT 4)
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628071
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapokЖеня32пропущено...

Дело в том, что начальная и конечная дата не фиксированные...

Не фиксированные на этапе компиляции или на этапе выполнения? Если на этапе выполнения - значит, вы неверно обьяснили что вам нужно. Возможно даже вы сами недоконца понимаете что хотите. Что значит не фиксированные? Как можно выбрать разницу показаний по непонятно_каким месяцам?

Если на этапе компиляции - то это нормально. Значит на этапе выпонения начало и конец известны, вот и конструируете нужный запрос и выполняете его.

Вы предлагаете мне определять максимальное значение по максимальной дате, но, понимаете в чем дело, человек может ошибиться и записать неверные показания. Например, 1-й месяц = 11; 2-й месяц (ошибся, и записал не верные показания) = 22; 3-й месяц = 18. Как узнать расход за два месяца?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628210
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. вашего вопроса я не понял

2. программа, устойчивая ко ошибкам которые ввел ей человек - это нобелевка, и возможно не одна. Частично ошибки можно выловить, например если ожидается ввод месяца, а ввели 22 - это ошибка, т.к. должно быть число меньше или равное 12. Но если ввели число в рамках ожидаемого диапазона - ни одна программа никогда не скажет что это ошибка.

3. запрос постом выше не подходит?
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628224
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapoktanglirпо последним четырём на текущий момент.

SELECT MAX(cold_water)-MIN(cold_water) FROM (select cold_water FROM table ORDER BY date DESC LIMIT 4)а теперь внимательно читаем мой предыдущий пост...
chabapok2. программа, устойчивая ко ошибкам которые ввел ей человек - это нобелевка, и возможно не одна. Частично ошибки можно выловить, например если ожидается ввод месяца, а ввели 22 - это ошибка, т.к. должно быть число меньше или равное 12. Но если ввели число в рамках ожидаемого диапазона - ни одна программа никогда не скажет что это ошибка.Пургу несёте :) ТС же ясно написал (таки заглянул, похоже, в спойлер): в месяц N передали 11, в месяц N+1 передали 22, а в месяц N+2 передали 18. Какой ещё "ввод месяца", вы вообще о чём?


Женя32, так это вам надо определиться, как считать. Если вы хотите получить разность первого и последнего по дате, а не просто максимального и минимального значений, то так и напишите. А то кто знает, может, у вас ещё какое-то решение уже созрело :)
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628303
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"ТС же ясно написал (таки заглянул, похоже, в спойлер): в месяц N передали 11, в месяц N+1 передали 22, а в месяц N+2 передали 18"

что значит "передать в месяц"? 11,22,18 - это расходы? Или это месяцы? непонятно.
вобщем, пока нормально задача не сформулирована.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628371
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рукалицо.жпг
chabapokчто значит "передать в месяц"?Значит "передать показания по данному счётчику за данный месяц". "Внести эти показания в БД", если так понятней.
chabapok11,22,18 - это расходы? Или это месяцы? непонятно.К.О. намекает, что если речь идёт о трёх месяцах и в формулировке условия присутствуют N,N+1 и N+2, то 11, 22 и 18 - это показания. Не месяцы, не расходы, а показания.
PS.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
 max(case when t1.n=1 then table.value else null end) as value1
 ,max(case when t1.n=2 then table.value else null end) as value2
from (
 select 1 n,id from table
 where <...> order by date_field desc limit 3,1
 UNION ALL
 select 2,id from table
 where <...> order by date_field desc limit 0,1
) t1
join table on t1.id=table.id
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628498
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, имхо, при помощи только mysql это не решить. Надо вытягивать эти строки в свою программу, и анализировать их. потому что появление 18 после 22 - это переполнение, (и строго говоря - не факт что перепеолнение однократное) то есть реальный расход зависит от колиества разрядов в счетчике.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628515
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokпереполнениеразверните мысль
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628668
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32человек может ошибиться и записать неверные показания. Например, 1-й месяц = 11; 2-й месяц (ошибся, и записал не верные показания) = 22; 3-й месяц = 18. Как узнать расход за два месяца?Давайте все же определимся с невнятностями терминологии :)

Насколько я понял, задачу можно сформулировать так: обрабатывабются показатели счетчиков воды по разным лицевым счетам. Каждый л/счет содержит 2 строки (т.к. даты ввода показаний могут различаться) - тип счетчика (хол/гор вода), дата снятия показаний и значение счетчика воды. Значение счетчика со временем может только возрастать (или как минимум неубывать). Если ошибочно введено большее значение, чем на счетчике, это считается авансом, потому как потом все равно нарастет до ранее введенного. Однако все же есть возможность исправить явно ошибочное значение (например, введено 2200 вместо 22.00) - но неясно на какую дату относить это исправление, если расчет стоимости уже произведен.

Далее. Требуется - что?
Посчитать расход воды за последний квартал года? Или за последние введенные показатели? За сколько месяцев? Как учитывать исправления неверно введенных данных?
Для конкретного лицевого счета или для всех? По одному типу счетчика или раздельно по каждому? Или итогово по л/счету?

Или вообще все не так, как написано - тогда о чем вообще речь?

Решать то, не знаю что - как-то не хочется

Подойдут ли для теста вот такие данные?Если нет - предоставьте свои
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table WaterMeter (
   id int identity primary key
   ,personal_id int
   ,date datetime
   ,typ int -- 1=холодная, 2=горячая
   ,value float
   );
insert WaterMeter (personal_id, date,typ,value) values
   (1,'2013-10-20',1,18),(1,'2013-11-21',1,40),(1,'2013-12-19',1,56),(1,'2014-01-24',1,76),
   (2,'2013-10-22',1,26),                      (2,'2013-12-20',1,68),
   (2,'2013-10-22',2,20),                      (2,'2013-12-20',2,54),
   (3,'2013-10-20',1, 9),(3,'2013-11-20',1,16),(3,'2013-12-20',1,29),
   (3,'2013-10-20',2, 5),(3,'2013-11-20',2,11),(3,'2013-12-20',2,19)
;

...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628828
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirchabapokпереполнениеразверните мысль

http://ru.wikipedia.org/wiki/Арифметическое_переполнение

Переполнение происходит в любом счетчике, где кол-во разрядов фиксированно. Например, в автомобильном одометре как правило шесть разрядов. Если поехать 999999км а потом проехать еще 2км, то показывать будет 000001. Тоже самое со счетчиком воды. 18 после 22, это свидетельство того, что было переполнение. (или что поставили новый счетчик, но будем этот случай не учитывать) Тогда реальный расход зависит от количества разрядов в счетчике. Например, если в нем 3 разряда, то это скоерй всего значит, что от 22 он досчитал до 999 потом сбросился в 0 и досчитал до 18. Ну то есть на самом деле это 22->1018, но единичка в самый старший разряд утерян.
...
Рейтинг: 0 / 0
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
    #38628856
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Давайте все же определимся с невнятностями терминологии :)

Насколько я понял, задачу можно сформулировать так: обрабатывабются показатели счетчиков воды по разным лицевым счетам. Каждый л/счет содержит 2 строки (т.к. даты ввода показаний могут различаться) - тип счетчика (хол/гор вода), дата снятия показаний и значение счетчика воды. Значение счетчика со временем может только возрастать (или как минимум неубывать). Если ошибочно введено большее значение, чем на счетчике, это считается авансом, потому как потом все равно нарастет до ранее введенного. Однако все же есть возможность исправить явно ошибочное значение (например, введено 2200 вместо 22.00) - но неясно на какую дату относить это исправление, если расчет стоимости уже произведен.


определиться с невнятностями - идея хорошая, только какое вы имеете отношение к топикстартеру?

"Если ошибочно введено большее значение, чем на счетчике, это считается авансом" -- програмно этот факт не вычислить. Или нужна еще галочка "данное значение больше чем на счетчике" или галочка "это значение введено ошибочно". Ну или что-то вроде этого. Вобщем, так не бывает. Хотите чтоб было без ошибок - делайте электронную систему сьема показаний счетчика в несколько каналов ввода. Это явно не случай топикстартера.

Поэтому предлагаю считать, что все, что введено - валидно. Валидация данных происходит на этапе ввода, и невалидные данные просто не могут попать в базу.

Поэтому, если следующее значение оказалось меньше предыущего - значит было переполнение, причем считаем, что однократное.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]