ヘルパーテーブルを作成し、start
からのすべての日付を入力する必要があります end
、次にLEFT JOIN
そのテーブルで:
SELECT d.dt AS date,
COUNT(*) AS total,
SUM(attitude = 'positive') AS positive,
SUM(attitude = 'neutral') AS neutral,
SUM(attitude = 'negative') AS negative
FROM dates d
LEFT JOIN
messages m
ON m.posted_at >= d.dt
AND m.posted_at < d.dt + INTERVAL 1 DAYS
AND spam = 0
AND duplicate = 0
AND ignore = 0
GROUP BY
d.dt
ORDER BY
d.dt
基本的に、ここで必要なのはダミーの行ソースです。
MySQL
それを生成する方法を欠いている唯一の主要なシステムです。
PostgreSQL
特殊関数generate_series
を実装します Oracle
およびSQL Server
再帰を使用できます(CONNECT BY
再帰的なCTE
s、それに応じて)。