繁体   English   中英

GROUP BY with MAX(date),但日期在两个单独的列中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM