如何用SQL获取同一零件在各门店的最大采购日期
查询零件全局最大采购日期并关联所有门店
需求:针对指定零件编号,获取该零件在任意门店的最大采购日期,并将这个日期返回给所有门店,无论该门店是否有该零件的有效采购记录(如日期为null的情况)。
示例输入数据
| part | date | loc |
|---|---|---|
| 123 | 8/1/2022 | store 1 |
| 123 | 8/2/2022 | store 1 |
| 123 | null | store 2 |
| 123 | 8/3/2022 | store 3 |
预期结果
| part | date | Loc |
|---|---|---|
| 123 | 8/3/2022 | store 1 |
| 123 | 8/3/2022 | store 2 |
| 123 | 8/3/2022 | store 3 |
解决方案(SQL)
方法1:窗口函数(适用于PostgreSQL、MySQL 8+、SQL Server等支持窗口函数的数据库)
SELECT DISTINCT part, MAX(date) OVER (PARTITION BY part) AS max_purchase_date, loc FROM your_table_name WHERE part = '123'; -- 指定目标零件编号
方法2:子查询关联(兼容低版本数据库)
SELECT t.part, global_max.max_date AS max_purchase_date, t.loc FROM your_table_name t CROSS JOIN ( SELECT MAX(date) AS max_date FROM your_table_name WHERE part = '123' ) global_max WHERE t.part = '123' GROUP BY t.part, global_max.max_date, t.loc;
说明
- 窗口函数
MAX(date) OVER (PARTITION BY part)直接计算当前零件的全局最大采购日期,无需额外关联,简洁高效。 - 子查询方法通过
CROSS JOIN将全局最大值与每个门店记录绑定,确保即使门店自身无有效采购日期(date为null),也能返回零件的全局最大采购日期。 MAX()函数会自动忽略null值,仅从有效日期中计算最大值。
内容的提问来源于stack exchange,提问作者JWIGHT
相关产品推荐
相关产品推荐

