≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

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

人气:626 时间:2019-04-20

这篇文章主要为大家详细介绍了一条语句简单解决“每个Y的最新X”的经典sql语句,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

代码如下:


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

本文来自:http://www.q1010.com/179/7188-0.html

注:关于一条语句简单解决“每个Y的最新X”的经典sql语句的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL Server

您可能感兴趣的文章

  • sqlserver 游标的简单示例
  • 关于Select Where In 的排序问题
  • 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
  • 三分钟学会Sql Server的复制功能
  • mssql SA帐号的改名和删除
  • SQL Server下几个危险的扩展存储过程
  • 阿拉伯数字转大写中文_财务常用sql存储过程
  • SQL Server常用管理命令小结
  • 列出SQL Server中具有默认值的所有字段的语句
  • sqlserver只有MDF文件恢复数据库的方法
上一篇:sqlserver 复制表 复制数据库存储过程的方法
下一篇:批量执行sql语句的方法
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。