'Getting Max Date for each group using MYSQL [duplicate]

I have a Invoice table in MYSQL which have below data types. INVOICE : ID VARCHAR(20) DATEADD TEXT STATUS VARCHAR(10) Data looks :

   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'

Script :

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;

But I'm not getting MAX date for the above data.

Required Out Put :

   ID           DATEADD        STATUS
'A0011' '31/05/2019 10:02:36' 'N'
'B0022' '30/04/2020 19:44:36' 'N'


Solution 1:[1]

With MySQL 8+ you can use 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

On Older MySQL try:

 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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1