2017-01-09 1 views
-3

enter image description hereWählen Sie SQL-Tabelle Daten

Ich habe eine Tabelle wie im Bild gezeigt. Hier hat Benutzer 'A' keine Zeit mit Id = 2. Wenn ich UserId, Name, MIN (inTime) und MAX (outtime) von MyTable auswähle, dann bekomme ich First InTime und Last OutTime. Anstatt diese Option auszuwählen, möchte ich die letzte Abwesenheit von Benutzer 'A' auf null setzen. Wie ist es möglich?.

Vielen Dank im Voraus

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images- von-Code-auf-so-wenn-eine Frage zu stellen/285557 # 285557 –

Antwort

0

Ich nehme an, Sie verwenden SQL Server:

select * 
from(select name, userid, dateatt 
    from table 
    group by name, userid, dateatt)t 
cross apply(select top 1 intime from table 
      where userid=t.userid and dateatt=t.dateatt order by id)i 
cross apply(select top 1 outtime from table 
      where userid=t.userid and dateatt=t.dateatt order by id desc)o 
+0

Danke Giorgi Nakeuri, es hat funktioniert. – DevinBegin

0

standardmäßig MAX und MIN nicht NULL sind, wenn die Daten auswertet.

Siehe die unten stehende Abfrage, die ich für Sie geändert habe, aus Artikel here.

Wir COALESCE verwenden alle NULL EndDate mit einem Datum zu ersetzen, die in der Zukunft, die überall in unserer Daten werden nicht kommen, 31. Dezember scheint 2099 wie ein vernünftiger Zeitpunkt dafür. Als nächstes nehmen wir die MAX der Daten, die, wenn NULL als 31.12.2099 ausgewertet wird und größer als jedes andere Datum in unserer Tabelle ist. Wickeln Sie das in einer CASE-Anweisung, um das Datum 31.12.2099 wieder auf NULL zu setzen, und gruppieren Sie unsere Daten nach StoreID.

SELECT Name, CASE WHEN MAX(COALESCE(outtime, ’12/31/2099′)) = ’12/31/2099′ THEN NULL ELSE MAX(outtime) END AS outtime FROM WorkSchedule GROUP BY Name