2016-03-22 3 views
0

Ich habe eine SQL-Tabelle, die wie folgt aussieht. Es hat ungefähr 4000 Beobachtungen. Unten ist ein Auszug. Ich brauche Hilfe beim Ziehen aller unterschiedlichen Werte (Projektnamen), Gruppieren sie entsprechend dem Projektnamen, und Ziehen der 2 letzten Daten für jeden Projektnamen, Vergleichen des Statuswertes und Zurückgeben eines "y" in einer neuen Spalte, wenn bestimmte Parameter erfüllt sind. dh (wenn für Projektnamen 18362, die Statuswerte der 2 letzten Bericht Daten sind beide gleich 1 ist, zurückgeben ja)SQL-Abgleich - Wie alle Werte für jeden eindeutigen Wert in einer Spalte zu ziehen und zu vergleichen

Report Date Project Name Status value 
3/21/2016 18362     1 
3/14/2016 18355     1 
6/8/2015 18342     2 
4/20/2015 11234     1 
2/15/2015 17893     2 
+0

das ist ich von dem alten Johnny Rivers Song erinnert, wo er sang: „sie Ihnen eine Nummer und wegnehmen Ihren Namen geben“ (IOW, wie es ist, dass Projektname ist eine Zahl?) –

+0

Projekt Name war ursprünglich eine Zahl plus eine Textzeichenfolge, ich löschte jedoch die Textzeichenfolge für dieses Beispiel. Keine Notwendigkeit, alle Informationen ins Internet zu stellen. –

+1

Normalerweise würde ich dies durch R oder Python tun. Eine einfache Schleife würde ausreichen. Ich bin mir jedoch nicht sicher, wie ich das mit SQL machen soll. –

Antwort

1

Wenn ich richtig verstehe, können Sie dies mit einer ziemlich fiesen korrelierte Unterabfrage :

update t 
    set status = (select iif(count(*) = 2, 'yes', 'no') 
        from t as t2 
        where t2.projectname = t.projectname and 
         t2.status = 1 and 
         t2.reportdate in (select top 2 t3.reportdate 
              from t as t3 
              where t3.projectname = t2.projectname 
              order by t3.reportdate desc 
             ) 
       ); 
+0

Ok gut. Vielen Dank. Das funktioniert. Ich werde versuchen, in Zukunft einen saubereren Weg zu finden, aber das sollte es tun. –

Verwandte Themen