एकल-स्तंभ उत्पन्न करें dates_hours
तालिका जिसमें एक उचित सीमा के भीतर सभी तिथियां और घंटे शामिल हैं (उदा. 1900 से 2200 तक)। फिर एक LEFT JOIN
करें इस तालिका से आपकी वर्तमान क्वेरी में।
इस तकनीक को सही ढंग से निष्पादित करने के लिए, आपको संभवतः अपनी तालिका में एक अनुक्रमित कॉलम जोड़ने की आवश्यकता होगी जिसमें एक परिवर्तित समय टिकट (आपका copied_timestamp
शामिल है) DATETIME
में रूपांतरित किया गया , घंटे के लिए गोल)
SELECT date_hour, count(req.converted_timestamp)
FROM
dates_hours
LEFT JOIN req ON req.converted_timestamp = dates_hours.date_hour
WHERE date_hour
BETWEEN (SELECT MIN(req.converted_timestamp) FROM req)
AND (SELECT MAX(req.converted_timestamp) FROM req)
GROUP BY date_hour
dates_hours
उत्पन्न करने के लिए टेबल:
CREATE TABLE dates_hours (date_hour DATETIME PRIMARY KEY);
DELIMITER $$$
CREATE PROCEDURE generate_dates_hours (to_date DATETIME)
BEGIN
DECLARE start_date DATETIME;
DECLARE inc INT;
SELECT MAX(date_hour) INTO start_date FROM dates_hours;
IF start_date IS NULL THEN
SET start_date = '1900-01-01';
END IF;
SET inc = 1;
WHILE start_date + INTERVAL inc HOUR <= to_date DO
INSERT INTO dates_hours VALUE (start_date + INTERVAL inc HOUR);
SET inc = inc +1;
END WHILE;
END $$$
DELIMITER ;
CALL generate_dates_hours('2200-01-01');
ठीक है, अब जब मैं खुद को प्रूफ-रीडिंग कर रहा हूं, मुझे एहसास हुआ कि यह काफी दूर की कौड़ी है। मुझे आशा है कि कोई और अधिक सुंदर के साथ आएगा।