【发布时间】:2021-08-15 22:41:59
【问题描述】:
我有一个日历表
| c_date |
|---|
| 2020-01-01 |
| 2020-01-02 |
| 2020-01-03 |
| 2020-01-04 |
| ..... |
| 2020-12-31 |
我有主表
| ID | col_A | col_B | col_C | col_Date |
|---|---|---|---|---|
| 1 | A | B | C | 2020-05-05 |
| 2 | A | B | C | 2020-04-05 |
| 3 | X | Y | Z | 2020-02-02 |
我希望作为日期的输出在第二个表中从 col_Date 开始的日历天重复。
输出应该是:
| col_A | col_B | col_C | c_Date |
|---|---|---|---|
| A | B | C | 2020-05-05 |
| A | B | C | 2020-05-06 |
| A | B | C | 2020-05-07 |
| ... | ... | ... | ... |
| A | B | C | 2020-12-31 |
| X | Y | Z | 2020-02-02 |
| X | Y | Z | 2020-02-03 |
| X | Y | Z | 2020-02-04 |
| ... | ... | ... | ... |
| X | Y | Z | 2020-12-31 |
我尝试了什么:相关查询,在 SQL Server 中有效,但在 SparkSQL (Databricks) 中无效
select A, B, C, c_date FROM calendar_table x
inner join main_table m on x.col_date = (select max(c_date) from main_table h
where h.A = m.A and h.B = m.b and h.C = m.C and h.c_date <= x.col_date )
where 1=1
不在 SparkSQL 中工作 注意:它应该只从那个月的 MAX 开始。请帮忙重写查询。
【问题讨论】:
-
语句
select col_A, col_B, col_C, c_Date from calendar_table c join main_table m on m.col_Date <= c.c_Date返回预期结果。但是查看您的查询,问题中可能缺少有关主表的一些详细信息? -
数据的重复应该从col_date的MAX开始。为了适应这一点,我使用了子查询。但不知何故,对于 1 个数据来说它很好,对于多个数据,重复即将到来。
-
我又编辑了 1 行。它澄清了输出。
-
对于更新后的主表,我第一条评论中的语句在我的测试中返回了预期的结果。你会得到哪个结果?
-
是的,只有当该月存在 1 条记录时,此查询才会起作用。如果存在 2 条记录,我需要为该月取 MAX date 并重复。相关性问题来了。
标签: sql apache-spark apache-spark-sql