“每个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列在建立索引,可以大大优化查询速度。
分享到:
相关推荐
在探讨"C#+X学习网址"这一主题时,我们首先需要明确C#是一种广泛使用的、现代的、面向对象的编程语言,由微软开发,主要用于Windows平台上的应用程序开发,但随着.NET Core和.NET 5的推出,C#也逐渐支持跨平台应用。...
总结来说,"[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].pki.rar"是一个涵盖全面网络知识,特别是公钥基础设施(PKI)的高价值在线课程,对于想要深入学习网络技术,尤其是网络安全性的人来说,是一个非常...
CD02-系统管理 CD04-Shell编程[Ⅰ]CD06-PHP_MySQL[Ⅰ]
每行数据被视为一个记录,记录可以被分割成字段,字段分隔符默认是空格或制表符,但可以自定义。Awk的程序由模式(pattern)和动作(action)组成,模式定义了在什么情况下执行动作。 例如,下面的简单脚本会在每一...
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].firewall_C.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].firewall_B.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].firewall_A.zip
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].Windows_secur_C.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].Windows_secur_B.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].Windows_secur_A.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].UNIX_secur_C.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].UNIX_secur_B.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].UNIX_secur_A.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].CIW_SecAudit_D.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].CIW_SecAudit_C.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].CIW_SecAudit_A.zip
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].CIW_SecAudit_B.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].HM-024tree(V4.0)-1.rar
[价值550元新版CIW网络工程师V3.0chinaitlab网校课程].HM-023VLAN(V4.0)-2.rar