SQL Select 每个商店的最后日期
SQL Select Last Date for Each Store
我有一个数据库,其中每一行包含 Site_No、Product_code、Stock_Date 和 Stock_Qty。对于单个站点和产品代码,可以有 20 个左右的条目,每个条目都有不同的日期。
我需要 return 所有站点编号,但只需要包含最新日期的记录。
我用谷歌搜索过,我在这里阅读了多篇似乎具有相同类型查询的帖子,但无法获得任何适合我的解决方案。我要么只得到 2 个结果(匹配最大日期的 2 个),要么我仍然得到所有结果(所有日期和网站)
使用 Teradata SQL 助手
下面是 select 语句,它将 return 产品代码 1234 的所有条目。
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
SELECT *
FROM
(
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty,
Row_Number() OVER (PARTITION BY Site_No ORDER BY Stock_Date DESC) rn
FROM Stock_Levels
where Product_code = 1234
)A
WHERE rn = 1
在 Teradata 中,有一个很好的标准扩展 SQL,用于过滤窗口聚合函数的结果,QUALIFY
:
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY Site_No -- for each site
ORDER BY Stock_Date DESC) = 1 -- get the highest date
我有一个数据库,其中每一行包含 Site_No、Product_code、Stock_Date 和 Stock_Qty。对于单个站点和产品代码,可以有 20 个左右的条目,每个条目都有不同的日期。
我需要 return 所有站点编号,但只需要包含最新日期的记录。
我用谷歌搜索过,我在这里阅读了多篇似乎具有相同类型查询的帖子,但无法获得任何适合我的解决方案。我要么只得到 2 个结果(匹配最大日期的 2 个),要么我仍然得到所有结果(所有日期和网站)
使用 Teradata SQL 助手
下面是 select 语句,它将 return 产品代码 1234 的所有条目。
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
SELECT *
FROM
(
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty,
Row_Number() OVER (PARTITION BY Site_No ORDER BY Stock_Date DESC) rn
FROM Stock_Levels
where Product_code = 1234
)A
WHERE rn = 1
在 Teradata 中,有一个很好的标准扩展 SQL,用于过滤窗口聚合函数的结果,QUALIFY
:
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY Site_No -- for each site
ORDER BY Stock_Date DESC) = 1 -- get the highest date