假設有一個這樣的表(實際上我有 50 個日期列可以比較):
| ID | 我的_DATE_1 | 我的_DATE_2 | 我的日期 3 |
|---|---|---|---|
| 1個 | 2022-10-1 | 2022-11-1 | 2022-12-1 |
| 2個 | 2022-10-31 | 2022-11-31 | 2022-12-31 |
對于每條記錄,我想獲取所有日期列中最近的非空白過去日期(小于今天的日期)。
所以我想要這些結果(給定當前日期 2022-11-15):
| ID | LATEST_DATE |
|---|---|
| 1個 | 2022-11-1 |
| 2個 | 2022-10-31 |
我在其他地方找到了這段代碼,但它只是獲得了跨列的最大日期,我需要在某處添加“最大過去”的條件,而不僅僅是“最大整體”,但我沒有經驗,CROSS APPLY也不知道我是否可以修改此查詢,或者是否有另一種方法可以撰寫它。
SELECT MA.MaxDate
FROM <my_table> AS MT
CROSS APPLY (
SELECT MAX(VA.LDate)
FROM (VALUES(MT.MY_DATE_1),(MT.MY_DATE_2),(MT.MY_date_3)) VA(LDate)
) AS MA(MaxDate)
uj5u.com熱心網友回復:
您可以在聚合之前進行過濾。這是一種方法:
select mt.id, max(va.ldate) as maxdate
from my_table as mt
cross apply ( values (mt.my_date_1), (mt.my_date_2), (mt.my_date_3) ) va(ldate)
where va.ldate > getdate()
group by mt.id
uj5u.com熱心網友回復:
如果您不想列出所有 50 個日期列,您可以使用一些 JSON 來動態 UNPIVOT 您的資料,而無需實際使用動態 SQL
例子
Select A.ID
,B.*
From YourTable A
Cross Apply (
Select Value = max(Value)
From OpenJson( (Select A.* For JSON Path,Without_Array_Wrapper ) )
Where [Key] not in ('ID','OtherColumns','ToExclude')
and try_convert(date,value)<=getdate()
) B
結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/533975.html
