|
|
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть таблица вида: Широта | Долгота | Транспорт | Дата 1 | 1 | машина | 05.06.2014 13.45 2 | 2 | машина1 | 05.06.2014 13.20 1.5 | 1.5 | машина | 05.06.2014 14.00 2.5 | 2.5 | машина1 | 05.06.2014 13.50 Нужно выбрать строки для каждой машины с максимальным значением колонки Дата на указанную дату, то есть на дату 05.06.2014 нужно получить по одной строке с максимальным значением времени для каждой машины. 1.5 | 1.5 | машина |05.06.2014 14.00 2.5 | 2.5 | машина1 | 05.06.2014 13.50 Пробовал сделать вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. Не работает, пишет - колонка "УчасткиДвижения.ШиротаКонца" должна фигурировать в предложении GROUP BY или использоваться в агрегатной функции. Пробовал добавлять в GROUP все колонки, пишет тоже самое. Пробовал вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. Выбирает все строки за день, сортирует, в колонке дата для всех строк в группе ставит максимальное значение времени для этого транспорта, то есть: Широта | Долгота | Транспорт | Дата 1.5 | 1.5 | машина | 05.06.2014 14.00 1 | 1 | машина | 05.06.2014 14.00 2.5 | 2.5 | машина1 | 05.06.2014 13.50 2 | 2 | машина1 | 05.06.2014 13.50 Мне же нужно: 1.5 | 1.5 | машина | 05.06.2014 14.00 2.5 | 2.5 | машина1 | 05.06.2014 13.50 Что можно попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 15:51:39 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
Попробуй так: Код: sql 1. 2. 3. 4. 5. 6. 7. Но учитывай, что если есть записи для одной машины, у которых максимальная дата повторяется вплоть до секунды, то будут выбраны все такие записи. Если это критично, то нужно еще подкрутить запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 11:28:52 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
mihail2014, читайте документацию... :( http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-DISTINCT для кого ее по вашему пишут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 11:45:17 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, "distinct on" это pg-специфичная кляуза. которой, кстати, разработчики пж-одмина криво злоупотребили при отрисовке дерева заданий pgagent. т.к. оптимизация вдоль ключей oderby по индексу, если таковой существует, для "distinct on" в pg до сих пор не реализована (что есть позор) - там например выгоднее корелятами (LIMIT 1) дергать состояние последнего запуска заданий (добавив нужный индекс), чем этой вот приблудой "distinct on" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 11:56:07 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
совершенно случайно пришла мысль: т.к. в pg (по крайней -- раньше) было возможно Код: sql 1. что есть LATERAL, с одной стороны и Код: sql 1. -- с другой -- в старом синтаксе пж были бы вполне законны Код: sql 1. при N<>1. Т.е. всё для этого было. а самого этого -- не было. забавно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 12:04:53 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
кляузаMaxim Boguk, "distinct on" это pg-специфичная кляуза. которой, кстати, разработчики пж-одмина криво злоупотребили при отрисовке дерева заданий pgagent. т.к. оптимизация вдоль ключей oderby по индексу, если таковой существует, для "distinct on" в pg до сих пор не реализована (что есть позор) - там например выгоднее корелятами (LIMIT 1) дергать состояние последнего запуска заданий (добавив нужный индекс), чем этой вот приблудой "distinct on" так это Pg шный форум... а не посвешенный ANSI-SQL стандарту (который в полном совместимом виде ни одной базой не реализован). PS: есть куча вещей которые можно по руками умнее написать... теже loose index scans... и что с того? Желающих лезть в postgresql planner/executor как то не наблюдается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 12:06:51 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, ну я например полез бы, т.к. дохера очевидных вещей надо править но я ни одним глазом не сионист, к сож-ю и вообще не кодер по прошлой жызни вот тут smagen бродит - он вроде из их команды может школоту какую озаботит заданием но он огрызается, когда ему об очевидном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 12:14:06 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
mihail2014, Добрый день. mihail2014OVER (partition BY ""Транспорт"" ORDER BY ""Транспорт"", ""Дата"" DESC) Правильно практически подумали, что надо смотреть в сторону оконных функций. PS. Реализовывал подобное (если актуально): http://www.biwed.ru/index.php/dobryaki/16-sql/57-window-function С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 09:18:12 |
|
||
|
Выборка строк по максимальной дате
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukmihail2014, читайте документацию... :( http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-DISTINCT для кого ее по вашему пишут? Максим, спасибо! Интересная штука, в oracle такого нет. Надо иметь в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 09:10:35 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38664358&tid=1998637]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
290ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 574ms |

| 0 / 0 |
