Postgresql 如何从第2列中的两个日期之间找到最大日期(日期),并在第1列中找到重复的日期?

Postgresql 如何从第2列中的两个日期之间找到最大日期(日期),并在第1列中找到重复的日期?,postgresql,duplicates,between,date-range,maxdate,Postgresql,Duplicates,Between,Date Range,Maxdate,我有一个数据库,第一列有产品名称,第二列有产品发布日期。我想在发布日期前找到“旧”产品。然而,我只对寻找至少1年前发布的“老”产品感兴趣。我无法对原始数据库基础结构进行任何编辑 该表如下所示: Product| Release_Day A | 2018-08-23 A | 2017-08-23 A | 2019-08-21 B | 2018-08-22 B | 2016-08-22 B | 2017-08-2

我有一个数据库,第一列有产品名称,第二列有产品发布日期。我想在发布日期前找到“旧”产品。然而,我只对寻找至少1年前发布的“老”产品感兴趣。我无法对原始数据库基础结构进行任何编辑

该表如下所示:

Product|   Release_Day
   A   |   2018-08-23
   A   |   2017-08-23
   A   |   2019-08-21
   B   |   2018-08-22
   B   |   2016-08-22
   B   |   2017-08-22
   C   |   2018-10-25
   C   |   2016-10-25
   C   |   2019-08-19
我已经尝试了DISTINCT、MAX、BETWEEN、>、的多个版本,在最新发布的版本中必须进行筛选


当您使用分组方式时,无需使用DISTINCT-如果每个产品只有一行,则无法获得副本。

在“2018-08-23”和“2019-08-22”之间添加和发布日期是没有意义的,因为您已经处于两种情况之间。不需要not-between。@GTodorov我只使用了not-between,因为当我只使用between时,它无法识别在范围之外发布的同名产品。DB保留了产品名称,但不考虑版本。@ SCAISEDGE,我相信它被显示为DATETIME,但它是以布尔形式出现的。它不能是布尔型的,只有1或0.MySQL没有布尔型数据类型。你确定你使用的是MySQL吗?我使用的平台不允许我使用DATE_SUB。这是因为第2列中的数据类型是布尔型的吗?合适的替代品是这样的吗?MAXrelease_day<'2018-08-22'?我去掉了DATE_SUB。最近发布的最新版本怎么可能是布尔版本?当我尝试使用SUM的另一个答案时,它返回了一条错误消息,消息为unknown:SUMBoolean。
SELECT DISTINCT product,MAX(release_day) as most_recent_release
FROM Product_Release
WHERE 
release_day between '2015-08-22' and '2018-08-22' 
and release_day not between '2018-08-23' and '2019-08-22'
GROUP BY 1
ORDER BY MAX(release_day) DESC
SELECT DISTINCT product,MAX(release_day) as most_recent_release
FROM Product_Release
WHERE 
release_day between '2018-08-23' and '2019-08-22'
AND product = A
GROUP BY 1
Product|Most_Recent_Release
   A   |   2018-08-23
   B   |   2018-08-22
   C   |   2015-10-25
Product|Most_Recent_Release
   A   |   2019-08-21
SELECT product, MAX(release_day) as most_recent_release
FROM Product_Release
GROUP BY product
HAVING most_recent_release < '2018-08-23'
ORDER BY most_recent_release DESC