如何从 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;
我有一个 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;