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

2021-08-30 03:42:24 字數 963 閱讀 8009

「每個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 (t2.y = t.y) and (t2.x > t.x or

t2.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 no...

SQL 獲取每個使用者最新的一條資料記錄

被問這個問題的時候我的第一想法居然是用order by。唉,好好的max 放著不用。sql示例 獲取檔案上傳記錄表中,每個使用者產生的最新一條記錄 select from file record as a inner join select file author,max file ctime as...

EF中一條簡單的查詢語句

已知 從別的地方取來資料存入本地資料庫,儲存的時候,順帶將伺服器的時間也存起來 這個時間是以 datetime 型別儲存的 問題 當我從本地資料庫取資料的時候,如果發現這條資料是一小時之前存的,就刪除然後重新從遠端獲取資料存入本地資料庫,如果是一小時之記憶體的,就直接讀取這些資料。這個問題一點也不難...