2017-05-09 4 views
0

Neu bei der Verwendung von SQLite. Benötigte Hilfe beim Erstellen einer Abfrage.Abrufen von Berichten nach monatlichen Intervallen

Im Wesentlichen brauche ich Summen in monatlichen Abständen nach Kategorien gruppiert. Im Moment werden alle 3 Intervalle in derselben Spalte angezeigt. Ich möchte, dass jedes Intervall als eigene separate Spalte angezeigt wird. Wie würde ich darüber gehen?

SELECT tickets.category AS 'Category', count(id) AS 'Interval' 

FROM tickets 

WHERE strftime('%Y-%m-%d',tickets.created_at) >= date('now','-30 days') 
    AND strftime('%Y-%m-%d',tickets.created_at)<= date('now', '-7 days') 

GROUP BY tickets.category 

UNION ALL 

SELECT tickets.category AS 'Category', count(id) 

FROM tickets 

WHERE strftime('%Y-%m-%d',tickets.created_at) >= date('now','-60 days') 
    AND strftime('%Y-%m-%d',tickets.created_at)<= date('now', '-31 days') 

GROUP BY tickets.category 

UNION ALL 

SELECT tickets.category AS 'Category', count(id) 

FROM tickets 

WHERE strftime('%Y-%m-%d',tickets.created_at) >= date('now','-90 days') 
    AND strftime('%Y-%m-%d',tickets.created_at)<= date('now', '-61 days') 

GROUP BY tickets.category 

ORDER BY tickets.category DESC 

Antwort

1

Dies wird bedingte Aggregation genannt. Verwenden Sie Ihre where Bedingungen in count, um sie als separate Spalten zu haben.

SELECT category 
,count(case when strftime('%Y-%m-%d',created_at) >= date('now','-30 days') 
     AND strftime('%Y-%m-%d',created_at)<= date('now', '-7 days') then id end) as days_7_30 
,count(case when strftime('%Y-%m-%d',created_at) >= date('now','-60 days') 
     AND strftime('%Y-%m-%d',created_at)<= date('now', '-31 days') then id end) as days_31_60 
,count(case when strftime('%Y-%m-%d',created_at) >= date('now','-90 days') 
     AND strftime('%Y-%m-%d',created_at)<= date('now', '-61 days') then id end) as days_61_90 
FROM tickets 
GROUP BY category 
+0

Sie Sir, sind ein Gott. – Jose

Verwandte Themen