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

  • 相关阅读:
    循环神经网络
    相似度计算(余弦距离/欧式距离)
    最常见Linux操作
    注意力机制总结
    随机打乱数组算法、蓄水池算法
    6.1 数据结构---树(遍历)
    Node.js调用C/C++
    linux中nmcli命令详解
    stylus入门使用方法
    webpack CommonsChunkPlugin详细教程
  • 原文地址:https://www.cnblogs.com/accumulater/p/6163420.html
Copyright © 2011-2022 走看看