「每個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 型別儲存的 問題 當我從本地資料庫取資料的時候,如果發現這條資料是一小時之前存的,就刪除然後重新從遠端獲取資料存入本地資料庫,如果是一小時之記憶體的,就直接讀取這些資料。這個問題一點也不難...