[英]Get a single value where the latest date
我需要获取商品的最新价格(作为较大的select声明的一部分),但我不太清楚。
表:
ITEMID DATE SALEPRICE
1 1/1/2014 10
1 2/2/2014 20
2 3/3/2014 15
2 4/4/2014 13
根据上面的示例,在查找项目1时,我需要将select的输出设置为'20',在查找项目2时,我的选择输出应该为'13'。
我正在使用Oracle SQL
尝试这个!
在sql-server
也可以在Oracle sql
工作
select * from
(
select *,rn=row_number()over(partition by ITEMID order by DATE desc) from table
)x
where x.rn=1
您需要Row_number()为所有记录分配一个number
,该记录按ITEMID进行分区,以便每个组都将获得RN,然后按date
desc排序以获取最新记录
也许是这样的:
测试数据
DECLARE @tbl TABLE(ITEMID int,DATE DATETIME,SALEPRICE INT)
INSERT INTO @tbl
VALUES
(1,'1/1/2014',10),
(1,'2/2/2014',20),
(2,'3/3/2014',15),
(2,'4/4/2014',13)
询问
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY [DATE] DESC) AS rowNbr,
tbl.*
FROM
@tbl AS tbl
)
SELECT
*
FROM
CTE
WHERE CTE.rowNbr=1
我认为,最易读/易懂的SQL是:
select salesprice from `table` t
where t.date =
(
select max(date) from `table` t2 where t2.itemid = t.itemid
)
and t.itemid = 1 -- change item id here;
假设表格的名称是table
并且每天每个商品只有一个价格(否则where条件匹配每个商品多于一行)。 或者,可以将子选择编写为自联接(不应影响性能)。
我不确定其他答案使用的OVER
/ PARTITION
。 取决于DBMS,也许可以对其进行优化以提高性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.