date - SQL返回最近的日期&時間戳

我有以下數據,需要查看action等於'USED'的最新日期:


CAT STAMP ACTION


A 05/12/2019 00:13 USED


A 05/12/2019 07:56 USED


A 05/12/2019 09:05 NEW


A 05/12/2019 10:46 NEW


B 20/12/2019 20:50 USED


B 13/01/2020 14:50 USED


B 10/01/2020 22:39 NEW


B 05/12/2019 12:04 NEW



需要它返回:


A 05/12/2019 07:56 USED


B 13/01/2020 14:50 USED



时间: 原作者:

可以使用子查詢:


select t.*


from table t 


where t.action = 'used' and


 t.stamp = (select max(t2.stamp) from table t1 where t1.stamp = t.stamp)



原作者:

一種方法是使用相關子查詢進行篩選:


select t.*


from mytable t


where 


 t.action = 'USED'


 and stamp = (


 select max(t1.stamp) 


 from mtable t1 


 where t1.cat = t.cat and t1.action = t.action


 )



另一個典型的解決方案是 left join模式:


select t.*


from mytable t


left join mytable t1


 on t1.cat = t.cat


 and t1.action = t.action


 and t1.stamp > t.stamp


where t.action = 'USED' and t1.cat is null



這兩種解決方案都假定stamp存儲在date 數據類型中,如果不是,那麼需要額外的步驟來將字元串轉換為日期。

原作者:

這是:


select t.*


from t 


where t.stamp = (select min(t2.stamp)


 from table t2


 where t2.cat = t.cat and t2.action = 'used' 


 );



注意篩選位於子查詢中。

或者,可能更簡單:


select t.cat, max(t.stamp)


from t


where t.action = 'used'


group by t.cat;



但這不允許返回其他列。

原作者:

看來stamp被存儲為varchar而不是datetime,首先嘗試CAST


SELECT cat, MAX(CAST stamp AS DateTime) as MxDate, 'used' as Action


FROM mytable


WHERE Action = 'used'


GROUP BY cat



原作者:
...