假设有一个这样的表(实际上我有50个日期列要比较):
| 识别码|我的日期1|我的日期2|年度日期3|
| - -|- -|- -|- -|
| 一个|2022年10月1日|2022年11月1日|2022年12月1日|
| 2个|2022年10月31日|2022年11月31日|2022年12月31日|
对于每条记录,我希望获得最新的、非空的过去日期(小于今天的日期),查看所有日期列。
因此,我希望得到以下结果(给定当前日期2022年11月15日):
| 识别码|最迟日期|
| - -|- -|
| 一个|2022年11月1日|
| 2个|2022年10月31日|
我在其他地方找到了这段代码,但它只是跨列获取最大日期,我需要在某个地方为“max past”添加条件,而不仅仅是“max overall”,但我对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)
2条答案
按热度按时间ltskdhd11#
您可以在汇总之前进行筛选。以下是一种方法:
yi0zb3m42#
如果不想列出所有50个日期列,可以使用JSON动态地取消数据的枢轴,而不实际使用动态SQL
示例
结果