各 ID 資料內有 Status 為 Y 資料的話,要找出 ID 資料內的日期最大值
環境建置
發問者提供資料,剛好都是 Status = 'Y' 且該日期為最大值,故意加上 ID 005 資料,有 Status = 'Y' 但該筆資料日期不是 ID 內最大值
use tempdb
go
DROP TABLE IF EXISTS tblA
DROP TABLE IF EXISTS tblB
CREATE TABLE tblA (ID char(3) , Name nchar(6))
INSERT INTO tblA (ID , Name) VALUES
('001' , N'王小明') , ('002' , N'張小花') ,
('003' , N'李小壯') , ('004' , N'黃小美') ,
('005' , N'自行加入')
CREATE TABLE tblB (ID char(3) , [Status] char(1) , [Date] date)
INSERT INTO tblB (ID , [Status] , [Date]) VALUES
('001' , 'N' , '2024-01-01') , ('001' , 'N' , '2024-01-10') , ('001' , 'Y' , '2024-01-28') ,
('002' , 'X' , '2024-03-10') , ('002' , 'N' , '2024-03-25') ,
('003' , 'N' , '2024-02-05') , ('003' , 'Y' , '2024-02-13') ,
('004' , 'N' , '2024-01-13') , ('004' , 'R' , '2024-01-25') ,
('005' , 'Y' , '2024-01-13') , ('005' , 'R' , '2024-01-25') -- 有 Y 存在,但 Y 日期並非是最大值
TSQL 解法
加入 ID 005資料
SELECT
A.* ,
IIF(IsIncludeY > 0 , MaxDate , NULL) AS [Date]
FROM tblA AS A
JOIN
(
SELECT ID ,
SUM(IIF([Status] = 'Y' , 1 , 0)) AS IsIncludeY ,
MAX([Date]) AS MaxDate
FROM tblB
GROUP BY ID
) AS B ON A.ID = B.ID
寫完發現發問者有變化需求,然後我也誤會題意,練習題就這樣吧,XD
沒有留言:
張貼留言