我寫了一個自定義函數來做到這一點:
CREATE FUNCTION [dbo].[MaxOf5]
(
@D1 DateTime,
@D2 DateTime,
@D3 DateTime,
@D4 DateTime,
@D5 DateTime
)
RETURNS DateTime
AS
BEGIN
DECLARE @Result DateTime
SET @Result = COALESCE(@D1, @D2, @D3, @D4, @D5)
IF @D2 IS NOT NULL AND @D2 > @Result SET @Result = @D2
IF @D3 IS NOT NULL AND @D3 > @Result SET @Result = @D3
IF @D4 IS NOT NULL AND @D4 > @Result SET @Result = @D4
IF @D5 IS NOT NULL AND @D5 > @Result SET @Result = @D5
RETURN @Result
END
要調用該方法,並計算出你的Action
列,這應該工作:
SELECT
MaxDate,
CASE WHEN MaxDate = FirstVisitedDate THEN 'FirstVisited'
WHEN MaxDate = SecondVisitedDate THEN 'SecondVisited'
WHEN MaxDate = RecoveryDate THEN 'Recovery'
WHEN MaxDate = ActionDate THEN 'Action'
END AS [Action]
FROM (
SELECT
RefNumber,
dbo.MaxOf5(FirstVisitedDate, SecondVisitedDate, RecoveryDate, ActionDate) AS MaxDate,
FirstVisitedDate, SecondVisitedDate, RecoveryDate, ActionDate
FROM table
) AS data
請注意,您可以將多個日期綁定到最大日期。在這種情況下,您的WHEN
子句的順序決定哪一個獲勝。
嗨大衛,感謝您的回覆..一切正常與您的代碼,但我不能做GROUP BY RefNumber ..可以請檢查一次..謝謝 – user3583912
@ user3583912,如果有2行具有相同的'RefNumber',你如何選擇要返回的日期和操作? – David