2017-02-15 3 views
0

Ich analysiere einen Datensatz. Tabelle hat drei Spalten:SQL Identifizieren Cloud ID

-CLOUD_ID (ID Field) example: 121312 

-CURRENT_Action (Textfield) example: Started 

-MIN_STARTDATE (Date) example: 2016-04-20 17:03:58.633 

Ich brauche die Cloud_ID der zu identifizieren, hat nicht die Current_Action „Gelöscht“ als Minimum MIN_Startdate.

+0

wird diese Arbeit nicht: 'select * from table where current_Action <> 'deleted'' – TheGameiswar

+0

Hallo thegameiswar, kein Grund brauche ich die Beziehung auf das Minimum (Datum). Jede Cloud-ID hat mehrere Einträge und ich muss diejenigen identifizieren, die nicht gelöscht wurden, da dort die erste Aktion stattfindet. – Joe

+0

oh ok.Thanks .Add mehr Beispieldaten hilft.Können Sie auch diesen Link zu Fragen in Zukunft zu verbessern: https: //spaghettidba.com/2015/04/24/how-to-post-at-sql-question -on-a-public-forum/ – TheGameiswar

Antwort

0

A sligtly anderer Ansatz, vergleichen, pls die perf:

with x as (select *, row_number() over(partition by cloud_id order by min_startdate) rn from @t) 
select cloud_id from x where rn = 1 and current_action <> 'deleted' 
+0

Hat auch den Trick! gleiche Geschwindigkeit – Joe

2

können Sie Fensterfunktionen verwenden:

select distinct cloud_id 
from (select t.*, 
      min(min_startdate) over (partition by cloud_id) as min_min_startdate 
     from t 
    ) t 
where min_startdate = min_min_startdate and 
     Current_Action <> 'Deleted'; 

Hinweis: Dies setzt voraus, dass Current_Action nicht NULL ist, aber das leicht in der Logik berücksichtigt werden kann.

+0

Beat mich um ein paar Sekunden;) –

+0

Hallo Gordon Linoff, thx für Ihre schnelle Antwort. Dieser hat funktioniert und gab mir das erwartete Ergebnis! THX für Ihre Hilfe. JOE – Joe