找出重覆資料中某欄位最大值的資料
問題
假如有個學員資料,其中只有登記日期不同,其他欄位都相同,我們要如何找出每個學員資料登記日期最大的那一筆出來呢?
資料準備
--找出重覆資料中某欄位最大值的資料
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[STUDENT1]') AND type in (N'U'))
DROP TABLE [dbo].[STUDENT1]
GO
CREATE TABLE [dbo].[STUDENT1](
[S_ID] [varchar](50) NOT NULL, -- 學員代號
[S_NAME] [nvarchar](50) NOT NULL, --學員姓名
[REG_DATE] [datetime] NOT NULL, --登記日期
CONSTRAINT [PK_STUDENT1] PRIMARY KEY CLUSTERED
(
[S_ID] ASC,
[REG_DATE] ASC
) ON [PRIMARY]
)
GO
--資料準備
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0001', N'亂馬客', CAST('2010/01/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0001', N'亂馬客', CAST('2010/02/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0001', N'亂馬客', CAST('2010/03/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0001', N'亂馬客', CAST('2010/04/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0002', N'造雨人', CAST('2010/01/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0002', N'造雨人', CAST('2010/03/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0003', N'阿光', CAST('2010/04/01' AS DATETIME))
INSERT INTO [STUDENT1]([S_ID] ,[S_NAME] ,[REG_DATE])
VALUES('S0003', N'阿光', CAST('2010/05/01' AS DATETIME))
實作
如上述資料,我們分別要找出S001,亂馬客,2010/04/01、S002,造雨人,2010/03/01及S003,阿光,2010/05/01的資料! 因為要最大值,所以就想到了用GROUP+MAX函式來處理啦!
SELECT A.S_ID, A.S_NAME, MAX(A.REG_DATE) AS MAX_REG_DATE FROM [STUDENT1] A (NOLOCK) GROUP BY A.S_ID, A.S_NAME
測試範例
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^