我有一个数据库,其中每行包含Site_No,Product_code,Stock_Date和Stock_Qty。对于单个网站&产品代码可以有20个左右的条目,每个条目都有不同的日期。
我需要返回所有站点号,但只返回包含最新日期的记录。
我已经用谷歌搜索了,我在这里阅读了多个帖子似乎有相同类型的查询,但是还没有能够获得适合我的任何解决方案。我最终只得到2个结果(2个匹配最大日期)或者我仍然得到所有结果(所有日期和网站)
使用Teradata SQL Assistant
以下是将返回产品代码1234的所有条目的select语句。
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
答案 0 :(得分:2)
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
答案 1 :(得分:0)
在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