Skip to content

Instantly share code, notes, and snippets.

@lorinc
Last active August 29, 2015 14:14
Show Gist options
  • Save lorinc/a963242456159847ec15 to your computer and use it in GitHub Desktop.
Save lorinc/a963242456159847ec15 to your computer and use it in GitHub Desktop.
simple data aggregation problem - SQL solution
/*
problem: return the sum of call durations for those operators
who initiated at least one call per day for a given
timeslot. data: calls(mtid, date, duration)
*/
SELECT sum(duration)
FROM calls
JOIN
(SELECT MTID, count(MTID)
FROM
(SELECT MTID, date -- returns 1 record for each unique MTID-date pairs
FROM calls
WHERE date BETWEEN '2014-01-04' AND '2014-01-11' -- criteria period
GROUP BY MTID, date) datepicker
GROUP BY MTID
HAVING count(MTID) = 7) selectedMTIDs -- have exactly this amount of days with a call
ON (calls.MTID = selectedMTIDs.MTID)
WHERE date BETWEEN '2014-01-04' AND '2014-01-11' -- sum period
/*
creating table
*/
create table CALLS (
id INT UNIQUE PRIMARY KEY,
MTID INT,
date DATE,
duration DECIMAL(3,1)
);
/*
populating test data
*/
insert into CALLS (id, MTID, date, duration) values (1, 1, '2014-01-02', 13.2);
insert into CALLS (id, MTID, date, duration) values (2, 2, '2014-01-09', 12.1);
insert into CALLS (id, MTID, date, duration) values (3, 2, '2014-01-16', 9.9);
insert into CALLS (id, MTID, date, duration) values (4, 2, '2014-01-12', 10);
insert into CALLS (id, MTID, date, duration) values (5, 2, '2014-01-17', 1.5);
insert into CALLS (id, MTID, date, duration) values (6, 3, '2014-01-14', 12.9);
insert into CALLS (id, MTID, date, duration) values (7, 2, '2014-01-05', 13.6);
insert into CALLS (id, MTID, date, duration) values (8, 1, '2014-01-10', 5.9);
insert into CALLS (id, MTID, date, duration) values (9, 3, '2014-01-14', 2.8);
insert into CALLS (id, MTID, date, duration) values (10, 1, '2014-01-07', 5.5);
insert into CALLS (id, MTID, date, duration) values (11, 2, '2014-01-16', 6.2);
insert into CALLS (id, MTID, date, duration) values (12, 3, '2014-01-14', 10.5);
insert into CALLS (id, MTID, date, duration) values (13, 2, '2014-01-03', 1.8);
insert into CALLS (id, MTID, date, duration) values (14, 1, '2014-01-15', 12.6);
insert into CALLS (id, MTID, date, duration) values (15, 3, '2014-01-10', 13.7);
insert into CALLS (id, MTID, date, duration) values (16, 3, '2014-01-06', 4.1);
insert into CALLS (id, MTID, date, duration) values (17, 3, '2014-01-13', 14.2);
insert into CALLS (id, MTID, date, duration) values (18, 2, '2014-01-05', 2.2);
insert into CALLS (id, MTID, date, duration) values (19, 1, '2014-01-07', 7.9);
insert into CALLS (id, MTID, date, duration) values (20, 1, '2014-01-02', 4.6);
insert into CALLS (id, MTID, date, duration) values (21, 2, '2014-01-08', 13.1);
insert into CALLS (id, MTID, date, duration) values (22, 2, '2014-01-08', 9.4);
insert into CALLS (id, MTID, date, duration) values (23, 1, '2014-01-08', 6.5);
insert into CALLS (id, MTID, date, duration) values (24, 1, '2014-01-12', 10.4);
insert into CALLS (id, MTID, date, duration) values (25, 1, '2014-01-05', 8.9);
insert into CALLS (id, MTID, date, duration) values (26, 1, '2014-01-08', 10.1);
insert into CALLS (id, MTID, date, duration) values (27, 3, '2014-01-12', 12.4);
insert into CALLS (id, MTID, date, duration) values (28, 2, '2014-01-05', 8.6);
insert into CALLS (id, MTID, date, duration) values (29, 2, '2014-01-06', 7);
insert into CALLS (id, MTID, date, duration) values (30, 2, '2014-01-11', 6);
insert into CALLS (id, MTID, date, duration) values (31, 2, '2014-01-14', 9.8);
insert into CALLS (id, MTID, date, duration) values (32, 1, '2014-01-04', 4.9);
insert into CALLS (id, MTID, date, duration) values (33, 2, '2014-01-03', 14.2);
insert into CALLS (id, MTID, date, duration) values (34, 3, '2014-01-01', 14.7);
insert into CALLS (id, MTID, date, duration) values (35, 1, '2014-01-07', 13.9);
insert into CALLS (id, MTID, date, duration) values (36, 2, '2014-01-06', 13.4);
insert into CALLS (id, MTID, date, duration) values (37, 1, '2014-01-02', 8.4);
insert into CALLS (id, MTID, date, duration) values (38, 3, '2014-01-14', 8.1);
insert into CALLS (id, MTID, date, duration) values (39, 3, '2014-01-15', 1.5);
insert into CALLS (id, MTID, date, duration) values (40, 2, '2014-01-03', 14.9);
insert into CALLS (id, MTID, date, duration) values (41, 1, '2014-01-13', 1.3);
insert into CALLS (id, MTID, date, duration) values (42, 1, '2014-01-10', 3.7);
insert into CALLS (id, MTID, date, duration) values (43, 2, '2014-01-15', 5.6);
insert into CALLS (id, MTID, date, duration) values (44, 1, '2014-01-10', 1.6);
insert into CALLS (id, MTID, date, duration) values (45, 3, '2014-01-17', 6.5);
insert into CALLS (id, MTID, date, duration) values (46, 2, '2014-01-04', 14.1);
insert into CALLS (id, MTID, date, duration) values (47, 3, '2014-01-16', 5.4);
insert into CALLS (id, MTID, date, duration) values (48, 2, '2014-01-12', 14.7);
insert into CALLS (id, MTID, date, duration) values (49, 3, '2014-01-13', 13.3);
insert into CALLS (id, MTID, date, duration) values (50, 1, '2014-01-05', 10.4);
insert into CALLS (id, MTID, date, duration) values (51, 3, '2014-01-10', 13.5);
insert into CALLS (id, MTID, date, duration) values (52, 2, '2014-01-08', 5.6);
insert into CALLS (id, MTID, date, duration) values (53, 2, '2014-01-07', 7.5);
insert into CALLS (id, MTID, date, duration) values (54, 3, '2014-01-16', 1.5);
insert into CALLS (id, MTID, date, duration) values (55, 2, '2014-01-07', 1.3);
insert into CALLS (id, MTID, date, duration) values (56, 1, '2014-01-08', 10.6);
insert into CALLS (id, MTID, date, duration) values (57, 2, '2014-01-02', 2.9);
insert into CALLS (id, MTID, date, duration) values (58, 2, '2014-01-02', 5.4);
insert into CALLS (id, MTID, date, duration) values (59, 2, '2014-01-08', 14.4);
insert into CALLS (id, MTID, date, duration) values (60, 1, '2014-01-02', 7.7);
insert into CALLS (id, MTID, date, duration) values (61, 2, '2014-01-17', 1.6);
insert into CALLS (id, MTID, date, duration) values (62, 2, '2014-01-04', 5.4);
insert into CALLS (id, MTID, date, duration) values (63, 1, '2014-01-17', 5.2);
insert into CALLS (id, MTID, date, duration) values (64, 2, '2014-01-17', 3.7);
insert into CALLS (id, MTID, date, duration) values (65, 1, '2014-01-02', 7.3);
insert into CALLS (id, MTID, date, duration) values (66, 3, '2014-01-04', 3.2);
insert into CALLS (id, MTID, date, duration) values (67, 2, '2014-01-02', 14.8);
insert into CALLS (id, MTID, date, duration) values (68, 3, '2014-01-07', 9.2);
insert into CALLS (id, MTID, date, duration) values (69, 3, '2014-01-10', 1.6);
insert into CALLS (id, MTID, date, duration) values (70, 1, '2014-01-17', 9.7);
insert into CALLS (id, MTID, date, duration) values (71, 2, '2014-01-07', 6.2);
insert into CALLS (id, MTID, date, duration) values (72, 2, '2014-01-15', 14.8);
insert into CALLS (id, MTID, date, duration) values (73, 1, '2014-01-06', 10.7);
insert into CALLS (id, MTID, date, duration) values (74, 1, '2014-01-13', 8.4);
insert into CALLS (id, MTID, date, duration) values (75, 1, '2014-01-04', 6.2);
insert into CALLS (id, MTID, date, duration) values (76, 1, '2014-01-10', 13.5);
insert into CALLS (id, MTID, date, duration) values (77, 2, '2014-01-17', 14.7);
insert into CALLS (id, MTID, date, duration) values (78, 1, '2014-01-15', 7.7);
insert into CALLS (id, MTID, date, duration) values (79, 3, '2014-01-13', 2.7);
insert into CALLS (id, MTID, date, duration) values (80, 3, '2014-01-15', 14.9);
insert into CALLS (id, MTID, date, duration) values (81, 2, '2014-01-02', 3.3);
insert into CALLS (id, MTID, date, duration) values (82, 1, '2014-01-10', 9.1);
insert into CALLS (id, MTID, date, duration) values (83, 3, '2014-01-01', 7.2);
insert into CALLS (id, MTID, date, duration) values (84, 1, '2014-01-03', 3.9);
insert into CALLS (id, MTID, date, duration) values (85, 1, '2014-01-01', 8.8);
insert into CALLS (id, MTID, date, duration) values (86, 3, '2014-01-10', 7.9);
insert into CALLS (id, MTID, date, duration) values (87, 3, '2014-01-15', 10);
insert into CALLS (id, MTID, date, duration) values (88, 1, '2014-01-14', 7.6);
insert into CALLS (id, MTID, date, duration) values (89, 3, '2014-01-01', 4.8);
insert into CALLS (id, MTID, date, duration) values (90, 2, '2014-01-16', 1.8);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment