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