2017-06-05 1 views
1

J'ai la table SQL suivante:valeurs de contrôle dans toutes les lignes précédentes dans le tableau 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); 

Je voudrais vérifier s'il y a des changements temporaires dans GROSS_SALES_PRICE

Par exemple, dans ce tableau I avoir un prix 38, puis j'ai deux lignes avec 26.49 puis 38 nouveau. Il peut y avoir n'importe quel nombre de rangées de prix inférieur donc je pense que je dois vérifier plusieurs rangées précédentes?

Je voudrais faire la troisième colonne avec une valeur de 1 si cette situation se produisit:

Table 2

+0

WHI ch version du serveur sql? – McNets

+0

Comment triez-vous vos lignes pour identifier le calendrier des modifications de données? – iamdave

+0

SQL Server 2014 –

Répondre

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

Je ne suis pas sûr que cela fasse ce qui est demandé. Il montre où un prix a changé, mais pas où un prix a changé * et puis a changé de nouveau * à ce qu'il était à l'origine. – iamdave

+0

Je ne pense pas que je vais travailler. Je dois vérifier plusieurs rangées parce que je veux vérifier s'il y a des préoides avec un prix inférieur temporaire. –

+0

Pelase, ajoutez votre résultat souhaité, ce n'est pas clair pour moi. – McNets