CREATE TABLE events (
start_date DATE,
end_date DATE
);
INSERT INTO events VALUES (DATE('2008-04-01'), DATE('2008-04-04'));
INSERT INTO events VALUES (DATE('2008-03-01'), DATE('2008-04-04'));
-- User enteres dates 2008-04-01 and 2008-04-03
SELECT date_range.some_day, COUNT(*)
FROM events, (
SELECT DATE('2008-04-01') AS some_day FROM DUAL UNION ALL
SELECT DATE('2008-04-02') FROM DUAL UNION ALL
SELECT DATE('2008-04-03') FROM DUAL
) AS date_range
WHERE date_range.some_day BETWEEN events.start_date AND
events.end_date
GROUP BY 1;
-- EXECUTION:
mysql> CREATE TABLE events (
-> start_date DATE,
-> end_date DATE
-> );
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> INSERT INTO events VALUES (DATE('2008-04-01'), DATE('2008-04-04'));
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO events VALUES (DATE('2008-03-01'), DATE('2008-04-04'));
Query OK, 1 row affected (0.00 sec)
mysql> SELECT date_range.some_day, COUNT(*)
-> FROM events, (
-> SELECT DATE('2008-04-01') AS some_day FROM DUAL UNION ALL
-> SELECT DATE('2008-04-02') FROM DUAL UNION ALL
-> SELECT DATE('2008-04-03') FROM DUAL
-> ) AS date_range
-> WHERE date_range.some_day BETWEEN events.start_date AND
-> events.end_date
-> GROUP BY 1;
+------------+----------+
| some_day | COUNT(*) |
+------------+----------+
| 2008-04-01 | 2 |
| 2008-04-02 | 2 |
| 2008-04-03 | 2 |
+------------+----------+
3 rows in set (0.00 sec)