SELECT * FROM 想查询的表
WHERE 条件列 IN
(SELECT MAX/MIN(条件列) FROM TEST.dbo.TEST_1 GROUP BY 想要查找的列)
例如一表中有 员工姓名、编号、所在部门、录入时间
要求,找到每个部门中最后一个加入的员工信息
在TEST数据库中建测试用表如下:
USE [TEST]
GO
/****** Object: Table [dbo].[TEST_1] Script Date: 2021/7/15 16:22:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TEST_1](
[NAME] [nvarchar](10) NULL,
[CODE_NUMBER] [int] NULL,
[DEPARTMENT] [nvarchar](50) NULL,
[UPDATE_TIME] [datetime] NULL
) ON [PRIMARY]
GO
查询表看看:
SELECT * FROM TEST_1 WITH(NOLOCK)
插入测试所需的数据:
INSERT INTO TEST_1 (
NAME,CODE_NUMBER,DEPARTMENT,UPDATE_TIME
) VALUES
(N'丁小冉',10001,N'营业部门','2021-01-01 00:00:00.000'),
(N'戴望秋',10002,N'营业部门','2021-02-02 00:00:00.000'),
(N'叶思夏',10003,N'研发部门','2021-03-03 00:00:00.000'),
(N'李沐春',10004,N'人事部门','2021-05-05 00:00:00.000'),
(N'秦暖冬',10005,N'管理部门','2021-06-06 00:00:00.000'),
(N'王心怡',10006,N'研发部门','2021-07-07 00:00:00.000')
这里又查询一次,看看数据插入的效果,顺便与查找一列的非重复数据做比对
SELECT * FROM TEST_1 WITH(NOLOCK)
因为是想要查找每个部门中最后一个加入的员工信息,
所以条件列是UPDATE_TIME、最后一个,所以用MAX方法,要查找的是每个部门,所以想要查找的列是DEPARTMENT
SELECT * FROM TEST.dbo.TEST_1
WHERE UPDATE_TIME IN
(SELECT MAX(UPDATE_TIME) FROM TEST.dbo.TEST_1 GROUP BY DEPARTMENT)