如何从 SQL 或 Azure Synapse 中的多个列中获取最新的非空值

How to get the latest not null value from multiple columns in SQL or Azure Synapse

我有如下格式的数据

我想要以下格式的输出

请帮助我 SQL 代码。谢谢!

就像我在评论中提到的那样,您需要 修复插入数据的任何内容,而不是丢失值,以便它们在“较新的”中成为 NULL " 行。

为了得到你想要的结果,你将不得不使用行编号和条件聚合,你拥有的列越多,这就会变得越乱;以及为什么你需要来解决真正的问题。这看起来像这样:

WITH CTE AS(
    SELECT GroupingColumn,
           NullableCol1,
           NullableCol2,
           DateColumn,
           CASE WHEN NullableCol1 IS NOT NULL THEN ROW_NUMBER() OVER (PARTITION BY GroupingColumn, CASE WHEN NullableCol1 IS NULL THEN 1 ELSE 0 END ORDER BY DateColumn DESC) AS NullableCol1RN,
           CASE WHEN NullableCol2 IS NOT NULL THEN ROW_NUMBER() OVER (PARTITION BY GroupingColumn, CASE WHEN NullableCol2 IS NULL THEN 1 ELSE 0 END ORDER BY DateColumn DESC) AS NullableCol2RN
    FROM dbo.YourTable)
SELECT GroupingColumn,
       MAX(CASE NullableCol1RN WHEN 1 THEN NullableCol1 END) AS NullableCol1,
       MAX(CASE NullableCol2RN WHEN 1 THEN NullableCol2 END) AS NullableCol2,
       MAX(DateColumn) AS DateColumn
FROM CTE;