一条语句简单解决“每个Y的最新X”的经典sql语句 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    复制代码代码如下:

    /****** 创建表  ******/

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

    drop table [dbo].[Table]

    GO

    Create TABLE [dbo].[Table] (

    [ID] [int] IDENTITY (1, 1) NOT NULL ,

    [Y] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [X] [smalldatetime] NOT NULL

    ) ON [PRIMARY]

    GO

    --插入数据

    Insert INTO [Table](Y, X) values('CCC', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('AAA', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('AAA', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('BBB', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('BBB', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('BBB', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('CCC', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('AAA', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('CCC', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('DDD', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('DDD', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('DDD', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('EEE', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('EEE', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('EEE', '2007-03-03 03:03:03')

    GO

    /****** 创建表  ******/

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

    drop table [dbo].[Table]

    GO

    Create TABLE [dbo].[Table] (

    [ID] [int] IDENTITY (1, 1) NOT NULL ,

    [Y] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [X] [smalldatetime] NOT NULL

    ) ON [PRIMARY]

    GO

    --插入数据

    Insert INTO [Table](Y, X) values('CCC', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('AAA', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('AAA', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('BBB', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('BBB', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('BBB', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('CCC', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('AAA', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('CCC', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('DDD', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('DDD', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('DDD', '2007-03-03 03:03:03')

    Insert INTO [Table](Y, X) values('EEE', '2007-01-01 01:01:01')

    Insert INTO [Table](Y, X) values('EEE', '2007-02-02 02:02:02')

    Insert INTO [Table](Y, X) values('EEE', '2007-03-03 03:03:03')

    GO解决“每个Y的最新X”经典SQL问题:以下几种方法真是八仙过海

    复制代码代码如下:

    Select ID, Y, X

    FROM [Table] T1

    Where (NOT EXISTS

    (Select 1

    FROM [Table] T2

    Where (T2.Y = T1 .Y) AND (T2.X > T1 .X or

    T2.X = T1 .X AND T2.ID > T1 .ID)))

    /*****************************************************************************/

    Select *

    FROM [Table]

    Where ID IN

    (Select MAX(T1.ID)

    FROM [Table] T1 JOIN

    (Select y, MAX(x) x

    FROM [Table]

    GROUP BY y) T2 ON T1.Y = T2.Y AND T1.x = T2.x

    GROUP BY T1.y)

    /*****************************************************************************/

    Select T .ID, T .Y, T .X

    FROM [Table] T INNER JOIN

    (Select MAX(T1.ID) AS ID

    FROM [Table] T1 JOIN

    (Select y, MAX(x) x

    FROM [Table]

    GROUP BY y) T2 ON T1.Y = T2.Y AND T1.x = T2.x

    GROUP BY T1.y) T2 ON T .ID = T2.ID

    /*****************************************************************************/

    Select *

    FROM [Table] T1

    Where ID IN

    (Select TOP 1 ID

    FROM [Table]

    Where Y = T1.Y

    orDER BY X DESC)

    /*****************************************************************************/

    Select *

    FROM [Table] T1

    Where (ID =

    (Select TOP 1 ID

    FROM [Table]

    Where Y = T1.Y

    orDER BY X DESC, ID DESC))

    /*****************************************************************************/

    /*****************************************************************************/

    Select ID, Y, X

    FROM [Table] T1

    Where (NOT EXISTS

    (Select 1

    FROM [Table] T2

    Where (T2.Y = T1 .Y) AND (T2.X > T1 .X or

    T2.X = T1 .X AND T2.ID > T1 .ID)))

    /*****************************************************************************/

    Select *

    FROM [Table]

    Where ID IN

    (Select MAX(T1.ID)

    FROM [Table] T1 JOIN

    (Select y, MAX(x) x

    FROM [Table]

    GROUP BY y) T2 ON T1.Y = T2.Y AND T1.x = T2.x

    GROUP BY T1.y)

    /*****************************************************************************/

    Select T .ID, T .Y, T .X

    FROM [Table] T INNER JOIN

    (Select MAX(T1.ID) AS ID

    FROM [Table] T1 JOIN

    (Select y, MAX(x) x

    FROM [Table]

    GROUP BY y) T2 ON T1.Y = T2.Y AND T1.x = T2.x

    GROUP BY T1.y) T2 ON T .ID = T2.ID

    /*****************************************************************************/

    Select *

    FROM [Table] T1

    Where ID IN

    (Select TOP 1 ID

    FROM [Table]

    Where Y = T1.Y

    orDER BY X DESC)

    /*****************************************************************************/

    Select *

    FROM [Table] T1

    Where (ID =

    (Select TOP 1 ID

    FROM [Table]

    Where Y = T1.Y

    orDER BY X DESC, ID DESC))

    /*****************************************************************************

    /效率嘛,在不同的字段建立索引速度都不尽相同,使用者见仁见智了.

    第一种方法速度在各方面都不错,而且在Y列在建立索引,可以大大优化查询速度,

一条语句简单解决“每个Y的最新X”的经典sql语句

电脑资料

一条语句简单解决“每个Y的最新X”的经典sql语句》(https://www.unjs.com)。

    QQ空间 搜狐微博 人人网 开心网 百度搜藏更多

    Tags:每个Y的最新X 经典sql语句

    复制链接收藏本文打印本文关闭本文返回首页

    上一篇:在查询结果中添加一列表示记录的行数的sql语句

    下一篇:SQL SERVER 2000通讯管道后复用劫持

   

相关文章

2013-08-08DDL、DML和DCL的区别与理解

2012-05-05sqlserver中重复数据值只取一条的sql语句

2012-07-07SQL Server 2000 清理日志精品图文教程

2010-09-09sql根据表名获取字段及对应说明

2014-06-06MSSQL自动重建出现碎片的索引的方法分享

2012-11-11SQL根据指定分隔符分解字符串实现步骤

2014-01-01sqlserver游标使用步骤示例(创建游标 关闭游标)

2013-11-11MS SQL Server数据库清理错误日志的方法

2006-10-10SQL语句示例

2013-06-06深入SQL Server中定长char(n)与变长varchar(n)的区别详解

   

文章评论

   

最 近 更 新

   

SQL Server常用管理命令小结

一条SQL语句修改多表多字段的信息的具体实

分享:在存储过程中使用另一个存储过程返

sql server中千万数量级分页存储过程代码

sql2000挂起无法安装的问题的解决方法

SQL里类似SPLIT的分割字符串函数

SQL 注入式攻击的本质

SQLSERVER的排序问题结果不是想要的

执行一条sql语句update多条记录实现思路

MSSQL经典语句

   

热 点 排 行

   

SQL Server 2008图文安装教程

SQL Server 2012 安装图解教程(附

sqlserver中distinct的用法(不重

SQL Server导入、导出、备份数据

SQL语句去掉重复记录,获取重复记

SQL Server数据库入门学习总结

SQL Server错误代码大全及解释(

sql convert函数使用小结

sql 时间函数 整理的比较全了

用SQL语句添加删除修改字段、一些

最新文章