“每个Y的最新X”的SQL经典问题

文章作者 100test 发表时间 2008:02:01 15:14:40
来源 100Test.Com百考试题网


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



相关文章


设置并加密A .Config中数据库连接字符串
“每个Y的最新X”的SQL经典问题
运行脚本时用 OOL保存运行结果的问题
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛