2017-06-19 4 views
-1

Ich habe eine Tabelle Bücher denen Benutzer mehrere Bücher spenden:Abfrage mit zwei verschiedenen, wo die Bedingungen

username books date 
____________________________________ 
Jon  3  2017-06-12 
Jon  2  2017-05-20 
Mary  4  2017-05-12 

Ich möchte so etwas wie

username This month Previous Month 
_______________________________________________ 
Jon   3    2 
+1

Welches DBMS verwenden Sie? –

+0

Bitte lesen Sie [fragen] und zeigen Sie, was Sie versucht haben. 'GROUP BY' und' DATEPART' werden Sie ziemlich weit bringen. – CodeCaster

+1

Und an den Upvoter: Sie sollten auch [fragen] lesen. Schade nicht, unvollständige Fragen zu beantworten. – CodeCaster

Antwort

0

Sie werden irgendeine Art von Gruppierung benötigen oder bedingte sum Operationen. Der einfachste Weg, um das Ergebnis in Frage zu kommen - auch wenn der tatsächlich nicht auf Ihre Bedürfnisse skalieren - ist:

select username 
     ,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate()),0) then books else 0 end as ThisMonth 
     ,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate())-1,0) then books else 0 end as PreviousMonth 
from books 
where username = 'Jon' 
group by username 

Offensichtlich mit mehr Details in Ihrer Frage, die Sie besser geeignet Antwort und man bekommen konnten, die nicht spezifisch ist zu SQL Server sollten Sie auf einem anderen DBMS sein. Das heißt, die Bedingungs- und Datumslogik ist in allen anderen DBMS-Implementierungen gleich, Sie müssen nur die Funktionsnamen ändern.

Dies funktioniert durch Hinzufügen der Anzahl der Monate zwischen einem beliebigen Startdatum (die 0 s in den Funktionen oben) und einem Datumswert, um das Datum am Anfang des Monats zu erhalten. Die von dieser Logik zurückgegebenen Daten für Ihren date-Wert und für heute (die getdate()-Funktion) geben denselben Anfang des Monats zurück, an dem sie sich beide innerhalb desselben Kalendermonats befinden. Durch Hinzufügen eines Monats weniger (-1 im obigen Skript) erhalten Sie den Beginn des letzten Monats, den Sie dann auch mit Ihrem date Wert vergleichen können, um die Nummer books für letzten Monat zu erhalten.

Die sum und group by ist da, um Ihre Daten in die eine Zeile pro username Wert "glätten".

Verwandte Themen