1. 程式人生 > 其它 >SQL SERVER 查詢一列的非重複資料

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)