问题描述
这里有人知道吗?
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
是最有效的方式,根据您想要的结果,Price
和 Date
不应成为我们分区部分的一部分:
select TOP 1 WITH TIES *
from [DWSTAGE].[PRCPLN]
order by ROW_NUMBER() OVER(PARTITION BY PRODID,STRCDE
ORDER BY STDTE desc)