从日期列表中提取每月最高日期

时间:2018-10-09 15:49:05

标签: postgresql

我有一个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年10月起的最大日期值(该列中前几个月的数据)。该月的列中有多个值,最大为2016-10-31

如果有人能指出为什么不返回本月的最大值,我将非常感激。

1 个答案:

答案 0 :(得分:2)

您是按月份(1到12)而不是月份和年份分组。由于2017-10-06比2016年10月的任何一天都大,所以这就是“十月”组的收益。

您应该

GROUP BY date_trunc('month', date_col)