博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一条语句简单解决“每个Y的最新X”的SQL经典问题
阅读量:6453 次
发布时间:2019-06-23

本文共 759 字,大约阅读时间需要 2 分钟。

“每个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列在建立索引,可以大大优化查询速度。

你可能感兴趣的文章
【Android】用MediaRecorder录制视频太短崩的问题
查看>>
区块链代币(Token)笔记 — — 术语
查看>>
坐标系与基本图元(3)
查看>>
A.华华听月月唱歌
查看>>
Form界面设置只读
查看>>
Ros学习之开发环境Roboware Studio
查看>>
华为手机,删除安装包apk
查看>>
hdu2050 折线分割平面---递推
查看>>
Linux常用热键(持续更新)
查看>>
mac安装django1.5.4
查看>>
SQL 电子书
查看>>
byte[]为参数新建一个String对象
查看>>
SpringMVC spring-servlet.xml配置
查看>>
Ubuntu14更换源
查看>>
IE9下不显示select
查看>>
day24-组合搜索组件
查看>>
Swagger-UI报Unable to infer base url
查看>>
gcc/g++ 实战之编译的四个过程
查看>>
InnoDB杂记
查看>>
【PHP基础】PHP与Web页面交互(表单处理)
查看>>