By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE edits (
edit_id INT,
edit_page_id INT,
edit_time INT,
stat INT
);
INSERT INTO edits VALUES
(1, 10, 20210502, 90),
(2, 10, 20210503, 91),
(3, 20, 20210504, 91),
(4, 30, 20210504, 90),
(5, 30, 20210505, 92),
(6, 40, 20210505, 90),
(7, 50, 20210503, 90);
SELECT * FROM edits;
CREATE TABLE pages (
page_id INT,
cat_id INT
);
INSERT INTO pages VALUES
(10, 100),
(20, 100),
(30, 100),
(40, 100),
(50, 200);
SELECT * FROM pages;
edit_id | edit_page_id | edit_time | stat |
---|---|---|---|
1 | 10 | 20210502 | 90 |
2 | 10 | 20210503 | 91 |
3 | 20 | 20210504 | 91 |
4 | 30 | 20210504 | 90 |
5 | 30 | 20210505 | 92 |
6 | 40 | 20210505 | 90 |
7 | 50 | 20210503 | 90 |
page_id | cat_id |
---|---|
10 | 100 |
20 | 100 |
30 | 100 |
40 | 100 |
50 | 200 |
SELECT cat_id, stat, COUNT(*) cnt, GROUP_CONCAT(edit_id) edit_ids
FROM pages
JOIN edits ON pages.page_id = edits.edit_page_id
JOIN ( SELECT edit_page_id, MAX(edit_time) edit_time
FROM edits
GROUP BY edit_page_id ) last_time ON edits.edit_page_id = last_time.edit_page_id
AND edits.edit_time = last_time.edit_time
GROUP BY cat_id, stat
cat_id | stat | cnt | edit_ids |
---|---|---|---|
100 | 90 | 1 | 6 |
100 | 91 | 2 | 2,3 |
100 | 92 | 1 | 5 |
200 | 90 | 1 | 7 |