2016-07-08 14 views
0

Ich habe folgende Konfiguration:MySQL: Wählen Sie diverse Statistiken

------------------------- 
| reference | t_stamp | 
------------------------- 
|   1 | 2016-07-08| 
|   1 | 2016-06-10| 
|   1 | 2016-06-01| 
|   2 | 2016-05-23| 
------------------------- 

Ich brauche von reference einzigartige reference Reihen mit 1) die Gesamtanzahl auszuwählen und 2) eine separate Zählung des letzten Monats von t_stamp.

sollte das Ergebnis sein:

------------------------------------ 
| reference | overall | last_month | 
------------------------------------ 
|   1 |  3|   2 | 
|   2 |  1|   0 | 
------------------------------------ 

Die erste mit select reference, count(reference) overall from tbl1 group by reference

leicht Wie kann ich die zweite in der gleichen Aussage erreichen?

Dank

+0

Werden gesetzt, diese Daten richtig repräsentativ für das Problem? – Strawberry

Antwort

0

Sie diese Art von bedingten Zählung implementieren kann mit sum:

sum(month(current_date - interval 1 month) = month(t_stamp)) 

Welche null, falls sein können, sind keine Zeilen für den vorangegangenen Monat. Wenn Sie stattdessen 0 abrufen möchten, können Sie coalesce(<...>, 0) verwenden.

+1

Nice one! Ich wusste nie, dass es möglich ist, eine bedingte Summe zu machen. Vielen Dank! – autarq

0

Mit bedingten Zählen unter Verwendung eine if() Funktion oder case Anweisung innerhalb eines sum() oder count():

select reference, 
     count(reference) overall, 
     count(if(curdate() - interval 1 month>=t_stamp,1,null)) last_month 
from tbl1 group by reference