如何从 MySQL Workbench 中的两列中获取最新日期?

How can I get the latest date from two columns in MySQL Workbench?

我有一个 table 看起来像这样的:

ID   B     C      date01        date02
11  xxx   xxxx   2020-05-01    2020-05-02
11  xxx   xxxx   2020-05-01    2020-05-03
11  xxx   xxxx   2020-05-01    2020-05-01
11  xxx   xxxx   2020-02-03    2020-02-08
11  xxx   xxxx   2020-02-03    2020-02-31
22  xxx   xxxx   2020-05-01    2020-05-02
22  xxx   xxxx   2020-05-01    2020-05-03
22  xxx   xxxx   2020-05-01    2020-05-01
22  xxx   xxxx   2020-02-03    2020-02-08
22  xxx   xxxx   2020-02-03    2020-02-31

我想 return 除了每个 ID 的最新日期 date01 和 date02 之外的所有内容,预期输出:

11  xxx   xxxx   2020-05-01    2020-05-03
22  xxx   xxxx   2020-05-01    2020-05-03

我试过这个:

SELECT 
    ID, B, C, date01, date02
FROM 
    table
order by date01 desc
GROUP BY ID 

但它给了我:Error Code: 1064. You have an error in your SQL syntax

我是 SQL 的新手,还在学习,我做错了什么?有人可以帮我弄这个吗?提前致谢。

更新:我忘记了一个约束,有些date01晚于date02,我只想要date01早于date02的日期。

您想 "aggregate" 到 id。您可以使用 MAX() 获取最新日期,如:

select
  id, 
  max(b),
  max(c),
  max(date01),
  max(date02)
from t
group by id

一种方法是相关子查询:

select t.*
from t
where greatest(t.date1, t.date2) = (select max(greatest(t1.date1, t2.date2))
                                    from t t2
                                    where t2.id = t.id
                                   );

另一种选择是window函数:

select t.*
from (select t.*,
             row_number() over (partition by id order by greatest(t1.date1, t2.date2) desc) as seqnum
      from t
     ) t
where seqnum = 1;

在 MySQL 8+ 上,我会在这里使用解析函数:

WITH cte AS (
    SELECT *, MAX(date01) OVER (PARTITION BY ID) max_date01,
        MAX(date02) OVER (PARTITION BY ID) max_date02
    FROM yourTable
)

SELECT *
FROM yourTable
WHERE date01 = max_date01 AND date02 = max_date02;