postgresql - 如何从第 2 列的 BETWEEN(dates) 和第 1 列的 DUPLICATES 中找到 MAX(date)?
问题描述
我有一个数据库,其中第 1 列中有产品名称,第 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、>、< 等。
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
而且,例如,如果我对产品 A 运行检查查询,我会得到:
Product|Most_Recent_Release
A | 2019-08-21
解决方案
用于HAVING
过滤most_recent_release
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
DISTINCT
使用时无需使用GROUP BY
- 如果每个产品只有一行,则无法重复。
推荐阅读
- sql - 存储过程正在编译,但值没有得到更新或插入
- oracle - OBIEE 12c。数据透视表的颜色设置
- javascript - 在 Puppeteer 中返回带有 CSS 查询的数组
- autofac - masstransit - 消费者没有注册和激活
- python - Python 字典 .get 方法的默认值为 *args
- javascript - JavaScript 解析嵌套的 JSON 数据
- rest - 通过 REST 将内容上传到 Confluence 的格式是什么?
- javascript - 如果语言不是英语,如何使用 jQuery 对齐文本?
- python - Python 无法导入 SharePlum,即使它已正确安装
- google-sheets - 如何在谷歌表中的数组中找到特定时期的移动平均线/最大值/最小值