SELECT *
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY title ORDER BY creat_time DESC ) AS count
FROM drug_activity
) a
WHERE a.count = 1
ORDER BY a.creat_time DESC
關鍵字解釋:
-
row_number() over():sqlsever中實現分組排序的關鍵字
-
partition by title order by creat_time desc:先通過title分組再通過creat_time排序(查出來的數據條數沒有變化,只是顯示順序發生了變化)
-
查詢出來的結果集中會多一個count字段,這個字段就是將分組后的數據按照我們的排序規則排列后顯示的序號,因為我們用的倒序排序,所以分組后的每組數據的第一條就是我們要的最新數據,然后只需要取count字段等於1的數據,就是我們需要的結果集了
-
a.count=1 ORDER BY a.creat_time desc:獲取每一組中的第一條並且通過 creat_time字段排序