2017-06-05 59 views
1

我有以下SQL表:校驗值

declare @t table(START_DATE datetime,INDEX_ID int, GROSS_SALES_PRICE decimal(10,2)); 
insert into @t values 
('20150619',10000410,38) 
,('20170311',10000410,26.49) 
,('20170312',10000410,26.49) 
,('20170317',10000410,38) 
,('20170318',10000410,38) 
,('20170321',10000410,38); 

我想檢查是否有GROSS_SALES_PRICE

例如臨時更改,本表中我有一個價格38,那麼我有兩行26.49,然後再38。可以有任何數量的較低價格的行,所以我認爲我必須檢查多個先前的行?

我想提出第三柱,1價值,如果這種情況發生了:

Table 2

+0

WHI ch版本的sql服務器? – McNets

+0

如何對行進行排序以確定數據更改的時間表? – iamdave

+0

SQL Server 2014 –

回答

1
WITH maxPrice AS 
(
    SELECT INDEX_ID, MAX(GROSS_SALES_PRICE) MaxPrice 
    FROM @t 
    GROUP BY INDEX_ID 
) 
SELECT t.INDEX_ID, t.GROSS_SALES_PRICE, 
     CASE WHEN GROSS_SALES_PRICE < maxPrice.MaxPrice THEN 1 ELSE 0 END AS [CHANGED] 
FROM @t t 
INNER JOIN maxPrice 
ON maxPrice.INDEX_ID = t.INDEX_ID; 
GO 
 
INDEX_ID | GROSS_SALES_PRICE | CHANGED 
-------: | :---------------- | ------: 
10000410 | 38.00    |  0 
10000410 | 26.49    |  1 
10000410 | 26.49    |  1 
10000410 | 38.00    |  0 
10000410 | 38.00    |  0 
10000410 | 38.00    |  0 

dbfiddle here

+0

我不確定這是不是問的問題。它顯示價格變化的地方,但不是價格變化的地方,然後又變回原來的地方。 – iamdave

+0

我不認爲我會工作。我必須檢查多行,因爲我想檢查tere是否有臨時較低價格的任何首選項。 –

+0

Pelase,添加你想要的結果,這對我來說不是很清楚。 – McNets