: HOUR() . . .
, . .
: Heres , .
SELECT mintime + INTERVAL seq.seq HOUR AS msghour
FROM (
SELECT MIN(DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR) AS mintime,
MAX(DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR) AS maxtime
FROM SMS_MESSAGES
) AS minmax
JOIN seq_0_to_999999 AS seq ON seq.seq < TIMESTAMPDIFF(HOUR,mintime,maxtime)
? .
: DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR . .
-, , (min max smsDate), .
-, seq_0_to_999999. : , . .
,
mintime + INTERVAL seq.seq HOUR AS msghour
, .
. , , . , :
SELECT DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR, COUNT(ID)
FROM SMS_MESSAGES
JOIN ( ) AS sq
ON DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR = msghour
GROUP BY DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR
ORDER BY DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR
, :
SELECT DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR, COUNT(ID)
FROM SMS_MESSAGES
JOIN (
SELECT mintime + INTERVAL seq.seq HOUR AS msghour
FROM (
SELECT MIN(DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR) AS mintime,
MAX(DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR) AS maxtime
FROM SMS_MESSAGES
) AS minmax
JOIN seq_0_to_999999 AS seq ON seq.seq < TIMESTAMPDIFF(HOUR,mintime,maxtime)
) AS sq
ON DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR = msghour
GROUP BY DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR
ORDER BY DATE(smsDate) + INTERVAL HOUR(smsDate) HOUR
.
, seq_0_to_999999 ? , ? : ; arent MySQL ( MariaDB v10 + ).
. , , .
- 0 9, :
DROP TABLE IF EXISTS seq_0_to_9;
CREATE TABLE seq_0_to_9 AS
SELECT 0 AS seq UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9;
, , 1000 , :
DROP VIEW IF EXISTS seq_0_to_999;
CREATE VIEW seq_0_to_999 AS (
SELECT (a.seq + 10 * (b.seq + 10 * c.seq)) AS seq
FROM seq_0_to_9 a
JOIN seq_0_to_9 b
JOIN seq_0_to_9 c
);
, 1000 , , , :
DROP VIEW IF EXISTS seq_0_to_999999;
CREATE VIEW seq_0_to_999999 AS (
SELECT (a.seq + (1000 * b.seq)) AS seq
FROM seq_0_to_999 a
JOIN seq_0_to_999 b
);
Here is a post that contains more information about all this. http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/