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

GROUP BY with MAX(date), but the date is in two separate columns

我正在尝试获取 table 中每位作者具有最新 posting 日期的所有行的 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

但让我们假设情况发生了变化。现在作者每月只能 post 一次。所以 table 也发生了变化, 'date' 列被分开了:

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

是的,我知道,看起来有点傻,但这不是我的决定。现在我有这样的 table 并且不允许我更改结构。 问题是:如何使用这个新 table 获得相同的结果。 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;