powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка строк по максимальной дате
9 сообщений из 9, страница 1 из 1
Выборка строк по максимальной дате
    #38663794
mihail2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Есть таблица вида:

Широта | Долгота | Транспорт | Дата
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.
[src]SELECT ""ШиротаКонца"", 
""ДолготаКонца"", 
""Транспорт"", 
MAX(""Дата"") 
FROM ""УчасткиДвижения"" 
WHERE ""Дата"" >= '"+ДатаНачала+"' AND ""Дата"" <= '"+ДатаОкончания+"' 
GROUP BY ""Транспорт"", ""Дата"" DESC"



Не работает, пишет - колонка "УчасткиДвижения.ШиротаКонца" должна фигурировать в предложении GROUP BY или использоваться в агрегатной функции. Пробовал добавлять в GROUP все колонки, пишет тоже самое.

Пробовал вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
[src]SELECT ""ШиротаКонца"", 
""ДолготаКонца"", 
""Транспорт"", 
MAX(""Дата"") OVER (partition BY ""Транспорт"" ORDER BY ""Транспорт"", ""Дата"" DESC), 
FROM ""УчасткиДвижения"" 
WHERE ""Дата"" >= '"+ДатаНачала+"' AND ""Дата"" <= '"+ДатаОкончания+"' 
GROUP BY ""Транспорт"", ""Дата"" DESC"



Выбирает все строки за день, сортирует, в колонке дата для всех строк в группе ставит максимальное значение времени для этого транспорта, то есть:

Широта | Долгота | Транспорт | Дата
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

Что можно попробовать?
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664349
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
  FROM ""УчасткиДвижения"" 
 WHERE (""Транспорт"", ""Дата"") IN (
         SELECT ""Транспорт"", MAX (""Дата"")
           FROM ""УчасткиДвижения""   
          GROUP BY ""Транспорт""
        )



Но учитывай, что если есть записи для одной машины, у которых максимальная дата повторяется вплоть до секунды, то будут выбраны все такие записи.
Если это критично, то нужно еще подкрутить запрос.
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664353
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mihail2014,

читайте документацию... :(
http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-DISTINCT
для кого ее по вашему пишут?
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664355
кляуза
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
"distinct on" это pg-специфичная кляуза.


которой, кстати, разработчики пж-одмина криво злоупотребили при отрисовке дерева заданий pgagent.
т.к. оптимизация вдоль ключей oderby по индексу, если таковой существует, для "distinct on" в pg до сих пор не реализована (что есть позор) - там например выгоднее корелятами (LIMIT 1) дергать состояние последнего запуска заданий (добавив нужный индекс), чем этой вот приблудой "distinct on"
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664357
кляуза
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
совершенно случайно пришла мысль:

т.к. в pg (по крайней -- раньше) было возможно

Код: sql
1.
SELECT .... unnest(t.u) FROM tab t



что есть LATERAL, с одной стороны
и
Код: sql
1.
SELECT ....{SETOF} FROM tab t

-- с другой

-- в старом синтаксе пж были бы вполне законны
Код: sql
1.
SELECT ....,(SELECT * FROM t2 WHERE ... LIMIT N) FROM tab t


при N<>1.
Т.е. всё для этого было.
а самого этого -- не было.
забавно.
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664358
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кляузаMaxim Boguk,
"distinct on" это pg-специфичная кляуза.


которой, кстати, разработчики пж-одмина криво злоупотребили при отрисовке дерева заданий pgagent.
т.к. оптимизация вдоль ключей oderby по индексу, если таковой существует, для "distinct on" в pg до сих пор не реализована (что есть позор) - там например выгоднее корелятами (LIMIT 1) дергать состояние последнего запуска заданий (добавив нужный индекс), чем этой вот приблудой "distinct on"

так это Pg шный форум... а не посвешенный ANSI-SQL стандарту (который в полном совместимом виде ни одной базой не реализован).

PS: есть куча вещей которые можно по руками умнее написать... теже loose index scans... и что с того? Желающих лезть в postgresql planner/executor как то не наблюдается...
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664364
кляуза
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

ну я например полез бы,
т.к. дохера очевидных вещей надо править
но я ни одним глазом не сионист, к сож-ю
и вообще не кодер по прошлой жызни

вот тут smagen бродит - он вроде из их команды
может школоту какую озаботит заданием
но он огрызается, когда ему об очевидном
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38664946
biwed.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mihail2014,
Добрый день.
mihail2014OVER (partition BY ""Транспорт"" ORDER BY ""Транспорт"", ""Дата"" DESC)
Правильно практически подумали, что надо смотреть в сторону оконных функций.

PS. Реализовывал подобное (если актуально): http://www.biwed.ru/index.php/dobryaki/16-sql/57-window-function

С уважением,
biwed.ru
...
Рейтинг: 0 / 0
Выборка строк по максимальной дате
    #38665892
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukmihail2014,

читайте документацию... :(
http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-DISTINCT
для кого ее по вашему пишут?
Максим, спасибо!
Интересная штука, в oracle такого нет.
Надо иметь в виду.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка строк по максимальной дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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