आपको एक सहायक तालिका बनानी होगी और इसे 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 एस, तदनुसार)।