SQL选择每个商店的上次日期

时间:2015-08-10 10:32:17

标签: sql date max teradata

我有一个数据库,其中每行包含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

2 个答案:

答案 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