2017-05-09 37 views
0

使用SQLite的新功能。在構建查詢時需要一些幫助。按月間隔獲取報表

本質上,我需要按類別分組的每月間隔總計。現在所有3個時間間隔顯示在同一列上。我希望每個間隔顯示爲自己的單獨列。我會怎麼做呢?

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 

回答

1

這被稱爲條件聚合。使用where條件count將它們作爲單獨的列。

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

你先生,是上帝。 – Jose