我试图通过排除系统列(
LoadDate, LoadDateTime, SourceFilename
)来仅检索表中不同的记录,因为正在加载重复记录并且系统加载日期不同。
因此,通过使用下面的查询,我只得到 1 条记录,但如果我不使用 Expect,则会因为欺骗而得到 10 条记录。
select distinct * except (LoadDate, LoadDateTime, SourceFilename)
from a;
现在,一旦我获得了不同的记录,我想附加/添加具有不同查询结果的 LoadDateTime 列数据,以便我以后也可以使用 LoadDateTime 列数据进行验证。
但我正在努力寻找方法
感谢在这方面的任何帮助。
非常感谢
我尝试了各种方法,如内部查询、分区等,但仍然没有解决方案
现在,一旦获得不同的记录,我想附加/添加具有不同查询结果的
列数据,以便稍后我也可以使用LoadDateTime
列数据进行验证。LoadDateTime
您说“一旦我获得了不同的记录”,但是哪一行是不同的记录,因为您组合了 10 行以获得单行输出?让我们假设您想要具有最新
LoadDateTime
的行,那么您可以使用 ROW_NUMBER
分析函数来实现:
PARTITION BY
子句的完整语法图,因此这可能不起作用,但你可以尝试:
SELECT * EXCEPT (rn)
FROM (
SELECT * EXCEPT(LoadDate, SourceFilename),
ROW_NUMBER() OVER (
PARTITION BY * EXCEPT (LoadDate, LoadDateTime, SourceFilename)
ORDER BY LoadDateTime DESC
) AS rn
FROM a
) a_with_rn
WHERE rn = 1;
如果您不能使用
PARTITION BY * EXCEPT (...)
那么您将必须命名所有列(这被认为是更好的做法)并且可以使用:
SELECT col1,
col2,
col3,
col4,
LoadDateTime
FROM (
SELECT col1,
col2,
col3,
col4,
LoadDateTime,
ROW_NUMBER() OVER (
PARTITION BY col1, col2, col3, col4
ORDER BY LoadDateTime DESC
) AS rn
FROM a
) a_with_rn
WHERE rn = 1;