問:資料庫一張表中有不同公司不同時間發來的資料,怎樣取每個公司最新的那條資料呢?
答:使用分析函式row_number() over (partiion by ... order by ...)來進行分組編號,然後取分組標號值為1的記錄即可。目前主流的資料庫都有支援分析函式。
其中,partition by 是指定按哪些字段進行分組,這些字段值相同的記錄將在一起編號;order by則是指定在同一組中進行編號時是按照怎樣的順序。
以sql server為例:
select
s.*
from
(
select
*, row_number() over (partition
by
[公司名]
order
by
[時間] desc)
as
group_idx
from
[表名]
) s
where
s.group_idx = 1
ps:如果只需要找出每組中不同的資料,用distinct就可以實現。
例:select distinct [列名] from [表名]
SQL分組排序後取每組最新一條資料的另一種思路
在hibernate框架和mysql oracle兩種資料庫相容的專案中實現查詢每個id最新更新的一條資料。之前工作中一直用的mybatis oracle資料庫這種,一般寫這類分組排序取每組最新一條資料的sql都是使用row number over 函式來實現 例如 select t1.from s...
mysql 分組查詢每組的最新一條資料
1.原始資料 學生成績表 2.想要獲取每個考生最新的考試成績,網上的例子 select a.from select from scoreinfo order by scoreinfo.createtime desc as a group by a.snum order by a.createtime...
sql中查詢每組的最後一條資料
學號 分數 測試時間 1 70 2011 10 21 20 21 32 1 85 2011 12 10 10 19 02 2 49 2012 02 11 13 32 45 2 60 2011 08 24 09 21 19 3 80 2011 04 20 14 44 10 我希望查出來的結果是 1 8...