【问题标题】:SQL - JOIN 2 tables with either NULL OR MAXSQL - 使用 NULL 或 MAX 连接 2 个表
【发布时间】:2021-10-24 17:14:22
【问题描述】:

我在 Teradata 中有两个需要 LEFT JOIN 的表。 第一个包括客户,第二个包括他们的详细信息以及有效期结束日期。 NULL 代表当前有效。

表1

client_id
1
2

表2

client_id valid_end
1 31.12.2021
1 31.12.2022
2 31.12.2020
2 null

我需要使用 Table2 中每个客户端的最新记录左连接这两个表。 如果当前有效的记录为 NULL,则使用它。如果没有任何 NULL 记录,则使用最高日期。

结果

client_id valid_end
1 31.12.2022
2 null

使用 QUALIFY 和 MAX 进行了很多尝试,但从未达到要求的结果。感谢您的建议。

【问题讨论】:

  • 向我们展示您当前的查询尝试。 (可能不太难修改。)
  • 我不会考虑使用空值来表示除缺失数据之外的任何内容,这是一种最佳做法。对于您的“当前”行,您可以使用遥远未来的某个日期,例如 9999-12-31。

标签: sql teradata


【解决方案1】:

使用 ROW_NUMBER 代替 MAX,NULLS FIRST 在最高日期之前对 NULL 进行排序:

qualify
   row_number() 
   over (partition by client_id
         order by valid_end desc NULLS FIRST) = 1

【讨论】:

  • 天啊,现在很明显了!太好了,谢谢。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多