|
|
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
chabapokCygapb-007Давайте все же определимся с невнятностями терминологии :) Насколько я понял, задачу можно сформулировать так: обрабатывабются показатели счетчиков воды по разным лицевым счетам. Каждый л/счет содержит 2 строки (т.к. даты ввода показаний могут различаться) - тип счетчика (хол/гор вода), дата снятия показаний и значение счетчика воды. Значение счетчика со временем может только возрастать (или как минимум неубывать). Если ошибочно введено большее значение, чем на счетчике, это считается авансом, потому как потом все равно нарастет до ранее введенного. Однако все же есть возможность исправить явно ошибочное значение (например, введено 2200 вместо 22.00) - но неясно на какую дату относить это исправление, если расчет стоимости уже произведен. определиться с невнятностями - идея хорошая, только какое вы имеете отношение к топикстартеру?Вопрос был задан не вам, не стоит флудить вашими "Поэтому предлагаю считать" в чужой теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:24:25 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Ну вы тоже предложили свой вариант - получается это ваши догадки в чужой теме. Топикстартер допустил неоднозначность, каждый написал про свое виденье этой задачи. Какой же это флуд, это не флуд, это альтернативы которые должны помочь топикстартеру определиться с тем что он имел в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:36:14 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
chabapokТоже самое со счетчиком воды. 18 после 22, это свидетельство того, что было переполнение. (или что поставили новый счетчик, но будем этот случай не учитывать)Открою вам секрет: в 99% случаев это свидетельство того, что были переданы ошибочные показания. chabapokПоэтому предлагаю считать, что все, что введено - валидно. Валидация данных происходит на этапе ввода, и невалидные данные просто не могут попать в базу. ROFL Спасибо, подняли настроение с утра. chabapokТопикстартер допустил неоднозначностьвгде он допустил "неоднозначность"? Вот тутЖеня32человек может ошибиться и записать неверные показания. Например, 1-й месяц = 11; 2-й месяц (ошибся, и записал не верные показания) = 22; 3-й месяц = 18всё описано предельно ясно, никаких домысливаний не требуется (по крайней мере, большинству присутствующих в теме). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 04:57:02 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
tanglirв 99% случаев это свидетельство того, что были переданы ошибочные показания. Хорошо, но только если так считать, оставшийся 1% - это ложка дегтя в бочке меда. И вероятность, что это ошибка ввода тем меньше, чем ближе к концу диапазона счетчика мы приближаемся. Например, если счетчик шестизначный, и после 120000 ввели 110000 - то наверное это ошибка (ну или был аванс), а если после 999100 ввели 10 - то это не ошибка и не аванс, а переполнение. tanglirСпасибо, подняли настроение с утра. под "на этапе ввода" подразумевалась и серверная часть тоже - с проверкой валидности. tanglirchabapokТопикстартер допустил неоднозначностьвгде он допустил "неоднозначность"? Вот тутЖеня32человек может ошибиться и записать неверные показания. Например, 1-й месяц = 11; 2-й месяц (ошибся, и записал не верные показания) = 22; 3-й месяц = 18всё описано предельно ясно, никаких домысливаний не требуется (по крайней мере, большинству присутствующих в теме). Во-первых, один пример не обязан покрывать все возможные случаи. Во-вторых, топикстартер, судя по вопросу, имеет мало опыта, поэтому некоторые проблемы просто еще не видит. Но это как суслик - его не видно, а он есть. В его идеях еще есть такие моменты. 1. Показания вводятся "на текущий момент". Это значит, что во 2й месяц туда введут 22, и только через месяц, когда туда введут 18 станет ясно, что где-то есть ошибка. Но где - все еще не ясно. А на протяжении всего месяца система будет работать, как будто ошибки нет. Через месяц возникнет подозрение на ошибку, но оно равновероятно для строк с числом 18 и 22. И только по последующим строкам можно как-то попытаться понять в какой строке была ошибка и корректировать, например, заменив это 22 интерполированным значением. Но это будет возможно только через время - когда последующие строки появятся. Но считать надо сейчас, с теми данными что есть. 2. Когда происходит замена счетчика, то никто не отматывает показания нового счетчика, чтобы они равнялись старому. При этом в базе, например, может появится еще 1 строка с отрицательным компенсирующим числом. И тогда вместо LIMIT 4 уже надо будет уже делать LIMIT 5, а если 1 месяц показания записать забудут - то надо делать LIMIT 3. Т.е. в общем случе LIMIT не годится, поэтому я бы делал выбор строк через WHERE. 3. Как-то реагировать на ошибки - это вообще не вопрос базы, это скорей уже вопрос алгоритмов. Вообще, есть подозрение, что все эти наши рассуждения топикстартеру до лампочки. Правильный с его точки зрения ответ или идею ему уже подали, и с тех пор он в тему не заглядывает и не заглянет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 10:15:22 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
chabapokа если после 999100 ввели 10 - то это не ошибка и не аванс, а переполнение.до меня только теперь дошло, что имелось в виду переполнение самого счётчика, а не некой расчётной переменной :) chabapokКогда происходит замена счетчика, то никто не отматывает показания нового счетчика, чтобы они равнялись старому. При этом в базе, например, может появится еще 1 строка с отрицательным компенсирующим числом.Вообще-то во вменяемо построенной базе при этом заводится новый счётчик :) На что сударь 007 и намекнул, посоветовав ТСу сначала поставить задачу, а уж потом её решать. Но скорее всего ТСу все эти рассуждения уже действительно не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 10:30:33 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
[quot chabapok]tanglirв 99% случаев это свидетельство того, что были переданы ошибочные показания. Хорошо, но только если так считать, оставшийся 1% - это ложка дегтя в бочке меда. И вероятность, что это ошибка ввода тем меньше, чем ближе к концу диапазона счетчика мы приближаемся. Например, если счетчик шестизначный, и после 120000 ввели 110000 - то наверное это ошибка (ну или был аванс), а если после 999100 ввели 10 - то это не ошибка и не аванс, а переполнение. tanglirСпасибо, подняли настроение с утра. под "на этапе ввода" подразумевалась и серверная часть тоже - с проверкой валидности. tanglirпропущено... вгде он допустил "неоднозначность"? Вот тутпропущено... .. 2. Когда происходит замена счетчика, то никто не отматывает показания нового счетчика, чтобы они равнялись старому. При этом в базе, например, может появится еще 1 строка с отрицательным компенсирующим числом. И тогда вместо LIMIT 4 уже надо будет уже делать LIMIT 5, а если 1 месяц показания записать забудут - то надо делать LIMIT 3. Т.е. в общем случе LIMIT не годится, поэтому я бы делал выбор строк через WHERE. ... С заменой счетчика все очень просто: if a < b then //если в этом месяце показания счетчика меньше чем в предыдущим месяце. begin holvod:=b-a; //чтобы проверить на сколько показания счетчика меньше, чем в этом предыдущим месяце if holvod > 150 then // если разница будет равна, приблизительно, величине расхода за несколько лет то, уже ясно что либо счетчик обнулился, либо, заменен, и тогда показания счетчика за предыдущий месяц заменяем нулем. begin b:=0; holvod:=a-b; end else holvod:=0;// иначе расход нуливой end else begin holvod:=a-b; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2014, 12:08:46 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
Почему-то и такой синтаксис не принимает?: SELECT * FROM счет ORDER BY Дата DESC limit 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2014, 18:05:53 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
Женя32, может, у вас нет поля с именем "Дата"? или компонент доступа косячит с кодировками - попробуйте на таблице с чисто латинскими названиями полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 17:54:53 |
|
||
|
Как выбрать минимальное значение столбца не из всей таблици, а из нескольких строк?
|
|||
|---|---|---|---|
|
#18+
Женя32С заменой счетчика все очень просто: Женя32то, уже ясно ROFL счастливый вы человек Женя32если разница будет равна, приблизительно , величине расхода за несколько лет то, уже ясно что либо счетчик обнулился, либо, заменен, и тогда показания счетчика за предыдущий месяц заменяем нулем.А в одной системе (не буду показывать пальцем) вообще тупо берётся 10% от среднего потребления - если потребление, взятое по модулю, отличается не более чем на 10% от среднего за полгода(год? не помню), то это тот же счётчик, если нет - то новый. Тут можно 1006500 методов изобрести, но главное, что все результат расчётов будут только предположениями . Но факт есть факт - если передали меньше, то расход таки будет отрицательный, пока не доказано иное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 18:01:24 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1834900]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 376ms |

| 0 / 0 |
