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

Postgresql 从日期列表中提取每月的最高日期,postgresql,Postgresql,我有一个date列,我试图查询该列以仅返回每月最大的日期 我现在拥有的东西,尽管很简单,却能回报99%的我想要的东西。例如,如果我按升序列出该列,则第一个条目为2016-10-17,范围为2017-10-06 需要注意的一点是,每个月的最后一天可能不会出现在数据中,因此我实际上只是想把任何现有月份出现的“最大”日期往后拉 我现在运行的查询看起来像 SELECT MAX(date_col) FROM schema_name.table_name WHERE <condition1>

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

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

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

你应该

GROUP BY date_trunc('month', date_col)

您只按月份分组,而不是按年份和月份分组。因此,由于有一个“2017-10-06”值,这比一个“2016-10-nn”值要大。感谢@eurotrash的回复。这很好地解决了问题。是的,这就是问题所在。非常感谢您的及时回复。
GROUP BY date_trunc('month', date_col)