我正在尝试弄清楚如何在 SQL 中使用 MIN 函数时合并日期范围限制

问题描述 投票:0回答:1

我有不同供应商针对特定商品的订购日期列表。我希望能够提取最小订单日期,但也让最小订单日期在特定日期范围内(即上个月的第一天到下个月月底)。

数据集:

项目 供应商 订购日期 注释
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
sql min
1个回答
0
投票

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';
© www.soinside.com 2019 - 2024. All rights reserved.