SQL 帮助 - 仅使用 Expect 子句获取不同的记录,然后添加 loaddatetime 列

问题描述 投票:0回答:1

我试图通过排除系统列(

LoadDate, LoadDateTime, SourceFilename
)来仅检索表中不同的记录,因为正在加载重复记录并且系统加载日期不同。

因此,通过使用下面的查询,我只得到 1 条记录,但如果我不使用 Expect,则会因为欺骗而得到 10 条记录。

select distinct * except (LoadDate, LoadDateTime, SourceFilename)
from a;

现在,一旦我获得了不同的记录,我想附加/添加具有不同查询结果的 LoadDateTime 列数据,以便我以后也可以使用 LoadDateTime 列数据进行验证。

但我正在努力寻找方法

感谢在这方面的任何帮助。

非常感谢

我尝试了各种方法,如内部查询、分区等,但仍然没有解决方案

sql oracle databricks
1个回答
0
投票

现在,一旦获得不同的记录,我想附加/添加具有不同查询结果的

LoadDateTime
列数据,以便稍后我也可以使用
LoadDateTime
列数据进行验证。

您说“一旦我获得了不同的记录”,但是哪一行是不同的记录,因为您组合了 10 行以获得单行输出?让我们假设您想要具有最新

LoadDateTime
的行,那么您可以使用
ROW_NUMBER
分析函数来实现:

我不使用 Databricks,并且文档没有给出窗口函数的

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;
© www.soinside.com 2019 - 2024. All rights reserved.