只选择最新的记录

问题描述

这里有人知道吗?

select distinct
    PRODID as PRODUCT_ID,STRCDE as STORECODE,PRCPR as Price,STDTE as Date
from [DWSTAGE].[PRCPLN]
order by PRODID 

查询结果示例

PRODUCT_ID    | STORECODE    | Price  |   Date
---------------------------------------------------
15707         |  15007       |   11    | 2012-01-03
15707         |  15007       |   13    | 2012-02-03
22102         |  15001       |   12    | 2012-01-02
40377         |  15002       |   13    | 2012-01-04
40377         |  15003       |   14    | 2012-02-03
40377         |  15003       |   15    | 2012-03-01
44775         |  15001       |   16    | 2012-06-01

我的预期结果

PRODUCT_ID    | STORECODE    | Price  |   Date
---------------------------------------------------
15707         |  15007       |   13    | 2012-02-03
22102         |  15001       |   12    | 2012-01-02
40377         |  15002       |   13    | 2012-01-04
40377         |  15003       |   15    | 2012-03-01
44775         |  15001       |   16    | 2012-06-01

解决方法

使用 not exists 如下:

select distinct PRODID as PRODUCT_ID,STRCDE as STORECODE,PRCPR as Price,STDTE as Date
From [DWSTAGE].[PRCPLN] t
Where not exists
(Select 1 from [DWSTAGE].[PRCPLN] tt
 Where tt.PRODID = t.PRODID
   And tt.PRODUCT_ID = t.PRODUCT_ID
   And tt.STDTE > t.STDTE)
order by PRODID
,

我认为 With Ties 是最有效的方式,根据您想要的结果,PriceDate 不应成为我们分区部分的一部分:

select TOP 1 WITH TIES *
from [DWSTAGE].[PRCPLN]
order by ROW_NUMBER() OVER(PARTITION BY PRODID,STRCDE
     ORDER BY STDTE desc)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...