2017-05-09 19 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

これを条件付き集計といいます。 countwhereという条件を使用して、それらを別々の列として使用してください。

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

関連する問題