“每个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列在建立索引,可以大大优化查询速度。
分享到:
相关推荐
在数据库管理中,"每个Y的最新X"问题是一个常见的查询需求,通常涉及到对一组数据进行分组,并找出每组中的最新记录。这里的Y代表一个分组字段,比如用户ID,而X则是一个时间戳或者版本字段,表示记录的更新时间或...
### 易语言中的SQL语句应用详解...此SQL语句用于从`phone_fee`表中统计各个单位去年每个月的电话费用。通过使用`DECODE`函数和`SUM`函数,可以分别计算出每个月的总费用,并按用户、电话号码、标准费用及年份进行分组。
这条SQL语句用于创建一个名为`b`的新表,并复制表`a`的结构到新表`b`中,但不会复制任何数据。这里通过`WHERE 1<>1`条件来确保没有任何行被实际插入到新表中。 ### 2. 拷贝表数据 **SQL语句示例**: ```sql INSERT...
### SQL查询语句实用大全(适合SQL的初学者以及经常写SQL的人) #### 一、属性列操作 ##### 1. 去除重复行 **去除重复行**是SQL中一个非常重要的功能,通常使用`DISTINCT`关键字来实现。`DISTINCT`可以帮助我们从...
通过子查询计算每个`title`下的最大`add_date`值,并与主表中的`title`进行关联,从而返回每组记录中的最新一条。 ### 4. 左外连接查询 **SQL**: `SELECT a.a, a.b, a.c, b.c, b.d, b.f FROM a LEFT OUTER JOIN b ...
【MySQL笔试题】一条语句解决多表联查与聚合查询 在数据库管理中,SQL(Structured Query Language)是用于管理关系型数据库的标准语言。针对给出的笔试题,我们需要运用到SQL中的各种语法,包括SELECT、INSERT、...
### 核电建造系统SQL操作语句 #### 1. 查六级计划内重复号 在核电建造系统中,为了确保计划的准确性与完整性,经常需要检查六级计划中的重复号。通过以下SQL语句可以实现这一目的: ```sql SELECT DRAW_CODE, ...
### 50个常用的SQL语句详解 #### 1. 创建数据库 - **语句**: ```sql CREATE DATABASE database_name; ``` - **功能**:此命令用于创建一个新的数据库。`database_name`应替换为您希望创建的数据库名称。 #### ...
根据给定的信息,我们可以归纳出一系列精妙的SQL语句示例及应用场景解析: ### SQL语句示例一:空查询技巧 #### SQL语句 ```sql SELECT * INTO b FROM a WHERE 1 <> 1; ``` #### 解析 此SQL语句是一种常用的技术...
### MySQL SQL语句及注释语法详解 #### 一、概述 MySQL 是一款非常流行的开源关系型数据库管理系统,广泛应用于各种规模的企业和个人项目中。它提供了丰富的 SQL 语句来帮助用户有效地管理数据。本文档将详细介绍 ...
在实际操作中,我们可能需要将一个表中的所有数据复制到另一个表中,这时可以使用如下的SQL语句: ```sql INSERT INTO b (a, b, c) SELECT d, e, f FROM a; ``` 这里假设`b`表已经存在,并且字段`a, b, c`分别对应...
查询score表中78分以上每个学生的平均分并筛选平均分在85分以上,按成绩降序排序的SQL语句: ```sql SELECT sno, AVG(s_score) AS 平均成绩, COUNT(*) AS 人数 FROM score WHERE s_score > 78 GROUP BY sno ...
以上就是针对给定的SQL查询习题的解答,每个查询都涉及到不同的SQL语法和操作,如子查询、连接、聚合函数、条件判断等,这些都是数据库查询的基础知识。理解并掌握这些技能对于数据库管理和数据分析至关重要。
- **解释**:该语句通过子查询获取与`tablea`中每一条记录相对应的`table`表中的最大`adddate`值。 - **应用场景**:常用于需要获取每个分类下的最新记录的情况。 #### 5. 左外连接(Left Outer Join) - **SQL语句...
- **示例**:向 `employee` 表中插入一条记录 ```sql INSERT INTO employee (id, name, age) VALUES (1, 'John Doe', 30); ``` #### UPDATE - **更新记录**:`UPDATE table_name SET column1 = value1, column2 ...
- **知识点**:这里主要考察了如何使用`INSERT INTO`语句向表中插入一条新记录。 - **SQL语句**: ```sql INSERT INTO S (Sno, SNAME, SAGE) VALUES ('S9', 'WU', 18); ``` ##### 2. 在基本表 S 中检索每一门...
此SQL语句用于查找每个title下的最新记录。通过子查询先找出每个title的最大`add_date`,然后通过`JOIN`操作与原始表进行关联,从而获取完整的记录。 **4. 左外连接** ```sql SELECT a.a, a.b, a.c, b.c, b.d, b.f...
以下是对每个SQL语句的详细解释: ### 1. 数据复制语句 ``` SELECT * INTO b FROM a WHERE 1<>1; ``` 这条语句展示了如何在不进行数据复制的情况下创建一个新的表结构。`WHERE 1<>1`条件确保没有行被实际插入到新...
它通过NOT EXISTS子查询确保S表中的每个学生都至少有一条与C表中的课程匹配的记录。 8. 查询所学课程包含学生S3所学课程的学生学号: ```sql SELECT DISTINCT Sno FROM SC AS X2 WHERE NOT EXISTS (SELECT * ...