使用 MYSQL 获取每个组的最大日期
Getting Max Date for each group using MYSQL
我在 MYSQL 中有一张发票 table,它具有以下数据类型。
发票 :
标识符 VARCHAR(20)
日期添加文字
状态变量 (10)
数据看起来:
ID DATEADD STATUS
'A0011' '04/01/2018 11:58:31' 'N'
'A0011' '31/05/2019 10:02:36' 'N'
'B0022' '04/01/2018 11:58:31' 'N'
'B0022' '31/05/2019 10:02:36' 'N'
'B0022' '30/04/2020 19:44:36' 'N'
脚本:
SELECT ID,MAX(DATEADD)DATEADD,STATUS FROM (
SELECT ID ,STR_TO_DATE(DATEADD, '%d/%m/%y')DATEADD,STATUS FROM Invoice WHERE STATUS = 'N' )T
GROUP BY ID, Status;
但我没有得到上述数据的最大日期。
要求输出:
ID DATEADD STATUS
'A0011' '31/05/2019 10:02:36' 'N'
'B0022' '30/04/2020 19:44:36' 'N'
有了 MySQL 8+
你可以使用 ROW_NUMBER
with cte as(
select *,row_number() over(partition by ID order by STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s') desc) as row_num
from Invoice
) select ID,DATEADD,STATUS
from cte
where row_num =1;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=150299f52a7bfa8d06f42d723c648ed6
在旧 MySQL
尝试:
SELECT ID,
DATEADD,
status
FROM Invoice in1 where (ID,STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s')) in ( select ID,
MAX(STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s'))
from Invoice
GROUP BY ID
);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2d0344c1eb99de9e00c6410f5b734133
我在 MYSQL 中有一张发票 table,它具有以下数据类型。 发票 : 标识符 VARCHAR(20) 日期添加文字 状态变量 (10) 数据看起来:
ID DATEADD STATUS
'A0011' '04/01/2018 11:58:31' 'N'
'A0011' '31/05/2019 10:02:36' 'N'
'B0022' '04/01/2018 11:58:31' 'N'
'B0022' '31/05/2019 10:02:36' 'N'
'B0022' '30/04/2020 19:44:36' 'N'
脚本:
SELECT ID,MAX(DATEADD)DATEADD,STATUS FROM (
SELECT ID ,STR_TO_DATE(DATEADD, '%d/%m/%y')DATEADD,STATUS FROM Invoice WHERE STATUS = 'N' )T
GROUP BY ID, Status;
但我没有得到上述数据的最大日期。
要求输出:
ID DATEADD STATUS
'A0011' '31/05/2019 10:02:36' 'N'
'B0022' '30/04/2020 19:44:36' 'N'
有了 MySQL 8+
你可以使用 ROW_NUMBER
with cte as(
select *,row_number() over(partition by ID order by STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s') desc) as row_num
from Invoice
) select ID,DATEADD,STATUS
from cte
where row_num =1;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=150299f52a7bfa8d06f42d723c648ed6
在旧 MySQL
尝试:
SELECT ID,
DATEADD,
status
FROM Invoice in1 where (ID,STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s')) in ( select ID,
MAX(STR_TO_DATE(DATEADD, '%d/%m/%Y %H:%i:%s'))
from Invoice
GROUP BY ID
);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2d0344c1eb99de9e00c6410f5b734133