SQL选择每个存储的最后日期
我有一个数据库,每行包含一个站点号、产品代码、库存日期和库存数量。对于单个站点和产品代码,可以有20个左右的条目,每个条目具有不同的日期 我需要返回所有站点编号,但只返回包含最新日期的记录 我在谷歌上搜索过,我在这里读过多篇文章,似乎都有相同类型的查询,但没有找到适合我的解决方案。我要么只得到2个结果(与最长日期匹配的2个),要么仍然得到所有结果(所有日期和站点) 使用Teradata SQL助手 下面是select语句,它将返回产品代码1234的所有条目SQL选择每个存储的最后日期,sql,date,max,teradata,Sql,Date,Max,Teradata,我有一个数据库,每行包含一个站点号、产品代码、库存日期和库存数量。对于单个站点和产品代码,可以有20个左右的条目,每个条目具有不同的日期 我需要返回所有站点编号,但只返回包含最新日期的记录 我在谷歌上搜索过,我在这里读过多篇文章,似乎都有相同类型的查询,但没有找到适合我的解决方案。我要么只得到2个结果(与最长日期匹配的2个),要么仍然得到所有结果(所有日期和站点) 使用Teradata SQL助手 下面是select语句,它将返回产品代码1234的所有条目 SELECT Site_No,
SELECT Site_No,
Product_code,
Stock_Date,
Stock_Qty
FROM Stock_Levels
where Product_code = 1234
在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
我只是想感谢你的时间,我尝试了给出的两个答案,它们都非常有效。感谢你的时间,这非常有效-非常感谢。
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