[英]GROUP BY with MAX(date), but the date is in two separate columns
我正在尝试获取表中每个作者的最新发布日期的所有行的 ID 列表,例如:
id author_id date
1 12 2020-12-23
2 12 2021-01-06
3 12 2021-04-12
4 12 2021-02-10
5 17 2021-09-16
6 17 2021-05-20
7 17 2021-02-23
8 17 2021-07-02
9 24 2021-03-24
10 24 2021-02-10
11 24 2020-08-18
12 24 2020-12-14
期望的结果应该是:
id
3
5
9
我使用了这个查询,它工作得很好:
SELECT a.id
FROM (
SELECT author_id, MAX(`date`) as MaxDate
FROM `posts_log`
GROUP BY author_id
) b
INNER JOIN `posts_log` a
ON a.author_id = b.author_id AND a.date = b.MaxDate
但是让我们想象一下情况发生了变化。 现在作者每月只能发帖一次。 所以表格也发生了变化,“日期”列被分开了:
id author_id month year
1 12 12 2020
2 12 1 2021
3 12 4 2021
4 12 2 2021
5 17 9 2021
6 17 5 2021
7 17 2 2021
8 17 7 2021
9 24 3 2021
10 24 2 2021
11 24 8 2020
12 24 12 2020
是的,我知道,看起来有点傻,但这不是我的决定。 现在我有了这样的表,并且不允许更改结构。 问题是:如何使用这个新表获得相同的结果。 MySQL可以吗?
您可以使用类似的逻辑。 不使用日期,而是使用年份和月份的计算值:
SELECT a.id
FROM (
SELECT p.author_id, MAX(p.year*100+p.month) as MaxMonth
FROM posts_log p
GROUP BY p.author_id
) b
INNER JOIN posts_log a
ON a.author_id = b.author_id AND a.year*100+a.month = b.MaxMonth;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.