解決「每個Y的最新X」問題的SQL語句

2021-09-30 08:13:48 字數 1031 閱讀 2394

「每個y的最新x」是乙個經典的sql問題,工作中經常碰到。如果想要解決此問題,還真是需要開動下腦筋殘性。當然不是「按y分組求最新的x值」那麼簡單,要求最新x的那條記錄或主鍵id。用一條sql語句可以簡單的解決此問題。

生成例項表和資料:

--建立表  

create table dbo.tab  

(  id int not null identity (1, 1),  

y varchar(20) not null,  

x datetime not null  

)  go  

--插入資料  

insert into tab(y, x) values('bbb', '2007-10-23 11:11:11')  

insert into tab(y, x) values('bbb', '2007-10-23 11:11:11')  

insert into tab(y, x) values('bbb', '2007-10-23 10:10:10')  

insert into tab(y, x) values('aaa', '2007-10-23 12:12:12')  

insert into tab(y, x) values('aaa', '2007-10-23 10:10:10')  

insert into tab(y, x) values('aaa', '2007-10-23 11:11:11')  

go

解決「每個y的最新x」經典sql問題:

--一條sql語句實現  

select id, y, x  

from tab t  

where (not exists  

(select 1  

from tab t2  

where (t

t2.y = t.y) and (t2.x > t.x or  

tt2.x = t.x and t2.id > t.id))) 

在y列在建立索引,可以大大優化查詢速度。

一條語句簡單解決「每個Y的最新X」的SQL經典問題

每個y的最新x 是乙個經典的sql問題,工作中經常碰到。當然不是 按y分組求最新的x值 那麼簡單,要求最新x的那條記錄或主鍵id。用一條sql語句可以簡單的解決此問題。生成例項表和資料 建立表 create table dbo.tab id int not null identity 1,1 y v...

每個分類取最新的幾條的SQL實現

分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。今天我就碰到這樣乙個需求。而我自己的解決方案就是sql過於複雜,或者效能比較差的。為...

每個分類取最新的幾條的SQL實現

分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。今天我就碰到這樣乙個需求。而我自己的解決方案就是sql過於複雜,或者效能比較差的。為...