SQL SERVER 查詢一列的非重複資料
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)