繁体   English   中英

获取单个值的最新日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM