zoukankan      html  css  js  c++  java
  • 一条语句简单解决“每个Y的最新X”的SQL经典问题

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

  • 相关阅读:
    pyc文件是什么【转载】
    Linux下的python等操作【转载】
    P1012 拼数 字符串
    P1309 瑞士轮 排序选择 时间限制 归并排序
    商业竞争 三分+背包
    老虎ji 剪枝模拟
    交通灯 并查集
    三色抽卡游戏 博弈论nim
    质数串 乱搞
    自动驾驶系统 bfs
  • 原文地址:https://www.cnblogs.com/accumulater/p/6163420.html
Copyright © 2011-2022 走看看