Извлечение наибольшей даты за месяц из списка дат - PullRequest
0 голосов
/ 09 октября 2018

У меня есть столбец date, который я пытаюсь запросить, чтобы вернуть только самую большую дату в месяц.

То, что у меня есть, хотя и очень просто, возвращает 99% того, что я ищу.Например, если я перечислю столбец в порядке возрастания, первая запись будет 2016-10-17 и будет иметь размер до 2017-10-06.

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

Запрос, который я выполняю в данный момент, выглядит как

SELECT MAX(date_col)
  FROM schema_name.table_name
 WHERE <condition1>
   AND <condition2>
 GROUP BY EXTRACT (MONTH FROM date_col)
 ORDER BY max;

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

"2016-11-30"
"2016-12-30"
"2017-01-31"
"2017-02-28"
"2017-03-31"
"2017-04-28"
"2017-05-31"
"2017-06-30"
"2017-07-31"
"2017-08-31"
"2017-09-29"
"2017-10-06"

, которые действительно являются максимальными значениями, присутствующими за каждый месяц в столбце.Однако набор результатов, по-видимому, не включает максимальное значение даты с октября 2016 года (данные за первые месяцы в столбце).В столбце для этого месяца есть несколько значений, начиная с 2016-10-31.

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

1 Ответ

0 голосов
/ 09 октября 2018

Вы группируете по месяцам (от 1 до 12), а не по месяцам и годам.Поскольку 2017-10-06 больше, чем любой день в октябре 2016 года, это то, что вы получаете за группу "Октябрь".

Вам следует

GROUP BY date_trunc('month', date_col)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...