我有不同供应商针对特定商品的订购日期列表。我希望能够提取最小订单日期,但也让最小订单日期在特定日期范围内(即上个月的第一天到下个月月底)。
数据集:
项目 | 供应商 | 订购日期 | 注释 |
---|---|---|---|
1 | ABC | 2020年1月1日 | <-MIN ORDERDATE for item and vendor |
1 | ABC | 2022 年 4 月 6 日 | |
1 | ABC | 2023 年 6 月 6 日 | |
1 | ABC | 2024 年 6 月 6 日 | |
1 | ABC | 2024 年 8 月 8 日 | |
1 | ABC | 2024 年 8 月 20 日 | |
1 | 防御 | 2024 年 8 月 4 日 | |
1 | 防御 | 2024 年 9 月 1 日 | |
1 | 防御 | 2024 年 9 月 14 日 | |
1 | 防御 | 2024 年 9 月 20 日 | |
1 | 防御 | 2024年9月10日 | |
1 | 防御 | 2024 年 12 月 12 日 | |
2 | ABC | 2021 年 11 月 11 日 | <=MIN ORDERDATE for item and vendor |
2 | ABC | 2023 年 3 月 3 日 | |
2 | ABC | 2023年10月10日 | |
2 | ABC | 2024 年 8 月 1 日 | |
2 | 防御 | 2024 年 8 月 2 日 | <-MIN ORDERDATE for item and vendor |
2 | 防御 | 2024 年 8 月 7 日 | |
2 | 防御 | 2024 年 9 月 4 日 | |
2 | 防御 | 2024 年 10 月 1 日 |
我想要使用日期范围(8/1/2024-10/30/2024)的查询来生成以下结果。即使有订单日期在该范围内,我也不希望它们包含在结果中,除非该供应商和商品的最小订单日期在该日期范围内。
项目 | 供应商 | 最早订单 |
---|---|---|
1 | 防御 | 2024 年 8 月 4 日 |
2 | 防御 | 2024 年 8 月 2 日 |
SELECT ITEM, VENDOR, MIN(ORDERDATE::timestamp) AS "Earliest Order"
FROM ORDERS
WHERE
ORDERDATE between date_trunc('month', CURRENT_DATE) - interval '1 month' and date_trunc('month', CURRENT_DATE) + interval '2 month' -interval '1 day'
Group by 1,2
按
min(orderdate)
过滤。
where
逐行过滤,不允许使用 聚合函数,请使用 having
代替。 having
对分组(聚合)数据进行过滤。
select
item,
vendor,
min(orderdate) AS "Earliest Order"
from orders
group by 1, 2
having min(ORDERDATE) between
date_trunc('month', CURRENT_DATE) - interval '1 month' and
date_trunc('month', CURRENT_DATE) + interval '2 month' - interval '1 day';