[EMAIL PROTECTED] ("Paul Halliday") wrote in
news:[EMAIL PROTECTED]: 

> Could you expand a little on how that works?

USE test;
DROP TABLE IF EXISTS event;
CREATE TABLE event (timestamp DATETIME NOT NULL);
INSERT INTO event (timestamp) VALUES
('2007-01-09 20:02:15'),
('2007-01-09 20:02:15'),
('2007-01-09 20:03:20'),
('2007-01-09 20:08:33'),
('2007-01-09 20:08:33'),
('2007-01-09 20:12:19'),
('2007-01-09 20:18:59'),
('2007-01-09 20:23:03'),
('2007-01-09 20:50:11'),
('2007-01-09 20:50:11'),
('2007-01-09 20:50:12'),
('2007-01-09 20:50:12'),
('2007-01-09 20:50:12'),
('2007-01-09 20:50:12'),
('2007-01-10 01:16:09'),
('2007-01-10 01:18:31'),
('2007-01-10 03:00:22'),
('2007-01-10 03:09:23'),
('2007-01-10 03:12:23'),
('2007-01-10 03:15:23'),
('2007-01-10 03:18:23'),
('2007-01-10 03:30:24');

DROP TABLE IF EXISTS ints;
CREATE TABLE ints (i INT UNSIGNED NOT NULL PRIMARY KEY);
INSERT INTO ints (i) VALUES
( 0), ( 1), ( 2), ( 3), ( 4), ( 5), ( 6), ( 7), ( 8), ( 9),
(10), (11), (12), (13), (14), (15), (16), (17), (18), (19),
(20), (21), (22), (23), (24), (25), (26), (27), (28), (29);


SET @interval := 1*60*60; -- 1 hour in seconds
SET @min_dt := '2007-01-09 20:00:00';
SET @max_dt := '2007-01-10 19:59:59';

SELECT
    @min_dt + INTERVAL (  i)[EMAIL PROTECTED]     SECOND AS S,
    @min_dt + INTERVAL (1+i)[EMAIL PROTECTED] - 1 SECOND AS E,
    DATE_FORMAT(@min_dt + INTERVAL (i)[EMAIL PROTECTED] SECOND, '%H') AS H,
    COUNT(timestamp)
FROM ints
LEFT JOIN event ON event.timestamp 
    BETWEEN @min_dt + INTERVAL (  i)[EMAIL PROTECTED]     SECOND AND
            @min_dt + INTERVAL (1+i)[EMAIL PROTECTED] - 1 SECOND 
WHERE
    @min_dt + INTERVAL (  i)[EMAIL PROTECTED] SECOND < @max_dt
GROUP BY S, E
ORDER BY S;

-- 
felix

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to