一条语句简单解决“每个Y的最新X”的SQL经典问题
2008-05-05 15:37
696 查看
“每个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列在建立索引,可以大大优化查询速度。
简单 2007-10-23 12:18 发表评论
生成实例表和数据:
--创建表
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列在建立索引,可以大大优化查询速度。
简单 2007-10-23 12:18 发表评论
相关文章推荐
- [导入][转]一条语句简单解决“每个Y的最新X”的SQL经典问题
- 一条语句简单解决“每个Y的最新X”的SQL经典问题
- 一条语句简单解决“每个Y的最新X”的经典sql语句
- 一条语句简单解决“每个Y的最新X”的经典sql语句
- 解决“每个Y的最新X”问题的SQL语句
- asp.net连接MYSQL的SQL语句中有汉字问题最简单、最终的解决方法
- 获取信息列表中每个类别下的最新一条记录的 SQL语句
- 一条sql语句引发mysql不停创建临时表的问题解决..coping to tmp table on desk
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- Node.js 回调函数来解决SQL语句与返回值的异步问题
- 如何解决p6spy日志记录sql语句重复的问题
- 一个sql语句的经典问题,求解!
- MySQL死锁问题实例分析及解决方法(主要是SQL语句可能会产生的问题)
- SQL 语句解决实际问题
- php使用mysql-timeout包,解决sql语句查询超时问题
- SQL反模式笔记17——用一条sql解决复杂问题
- p6spy为SSH做SQL语句日志时缺少一行的问题解决
- sql语句解决自增关键字重排/初始化问题
- 解决 JMeter 中 SQL 语句参数化的问题
- 使用 Navicat for MySQL 执行 SQL 语句时,出现 out of memory 问题的解决方法