2017-05-05 4 views
0

deklarieren Ich möchte ein Dataset 'bereinigen' und eine neue Variable deklarieren und dann ein Datum basierend auf dem Rang eingeben.Neue Variable und Eingabedatum basierend auf Rang

Mein-Datensatz sieht wie folgt aus:

+-----+--------------+------------+-------+ 
| ID | Start_date | End_date | Rank | 
+-----+--------------+------------+-------+ 
| a | May '16  | May '16 |  5 | 
| a | Jun '16  | Jul '16 |  4 | 
| a | Jul '16  | Aug '16 |  3 | 
| a | Aug '16  | NULL '16 |  2 | 
| a | Sept '16  | NULL '16 |  1 | 
+-----+--------------+------------+-------+ 

ich das Startdatum von Rang 1 in das Enddatum der Rang 2 oder sagen Eingang 5 beginnen grundsätzlich eingeben möchten in Ende 6 (immer 1).

haben folgendes auswählen in eine tempory Tabelle und Rang basierend auf ID und das Datum geschrieben:

SELECT 
    [Start_Date] as 'start' 
    ,[End_Date] as 'end' 
     ,[Code] as 'code' 
     ,[ID] as 'id' 
    ,rank() over (partition by [id] order by [Start_Date]) as 'rank' 
INTO #1 
FROM [Table] 
ORDER BY [id] 

Sein folgenden Teil, der nicht ... Sie arbeiten

DECLARE new_end 
BEGIN select [#1].[start] into new_end FROM [#1] 
WHERE (
    ([#1].[rank] = 1) 
    AND ([#1].[end] IS NULL) 
    ) 
+0

Post erwartete Ausgabe so kann sich jeder leicht helfen. – Tomato32

Antwort

0

Unter der Annahme, Haben Sie bereits Ihren Datensatz wie in Ihrer Frage angegeben, dies ist nur ein einfaches Selbst join, nein?

declare @t table(ID nvarchar(1), Start_date date, End_date date, [Rank] int); 
insert into @t values ('a','20170501','20170501',5),('a','20170601','20170701',4),('a','20170701','20170801',3),('a','20170801',NULL,2),('a','20170901',NULL,1); 

select t1.ID 
     ,t1.Start_date 
     ,isnull(t1.End_date,t2.Start_date) as End_date 

     -- If you *always* want to overwrite the End_Date use this instead: 
     -- ,t2.Start_date as End_date 

     ,t1.[Rank] 
from @t t1 
    left join @t t2 
     on(t1.[Rank] = t2.[Rank]+1); 

Ausgang:

+----+------------+------------+------+ 
| ID | Start_date | End_date | Rank | 
+----+------------+------------+------+ 
| a | 2017-05-01 | 2017-05-01 | 5 | 
| a | 2017-06-01 | 2017-07-01 | 4 | 
| a | 2017-07-01 | 2017-08-01 | 3 | 
| a | 2017-08-01 | 2017-09-01 | 2 | 
| a | 2017-09-01 | NULL  | 1 | 
+----+------------+------------+------+ 
+0

Danke - das ist großartig – tj123

Verwandte Themen