【发布时间】:2019-09-23 18:51:59
【问题描述】:
我的问题类似于LEFT JOIN ON most recent date in Google BigQuery 但是,如果表 A 中有超过 1 个同名,我想在最近几天(或更多)加入。
TABLE A
| name | timestamp | a_data |
| ---- | ------------------- | ------ |
| 1 | 2018-01-01 11:10:00 | a |
| 1 | 2018-01-01 11:10:00 | h |
| 2 | 2018-01-01 12:20:00 | b |
| 3 | 2018-01-01 13:30:00 | c |
TABLE B
| name | timestamp | b_data |
| ---- | ------------------- | ------ |
| 1 | 2018-01-01 11:00:00 | w |
| 1 | 2018-01-01 10:30:00 | i |
| 1 | 2018-01-01 10:00:00 | j |
| 2 | 2018-01-01 12:00:00 | x |
| 3 | 2018-01-01 13:00:00 | y |
| 3 | 2018-01-01 13:10:00 | y |
| 3 | 2018-01-01 13:10:00 | z |
我想做的是
- 对于表 A
SQL LEFT JOIN中的每一行,表 B 中的最新记录早于它。 - 如果有多种可能性,请选择最后一种。
- 当表A中有多个同名时,不要取最后一个,而是取倒数第二个。等等。
基本上,这意味着如果可能,我想将表 A 中的每一行与表 B 中的最新(如果尚未使用)行配对,否则只需删除该行。
目标结果
| name | timestamp | a_data | b_data |
| ---- | ------------------- | ------ | ------ |
| 1 | 2018-01-01 11:10:00 | a | w |
| 1 | 2018-01-01 11:10:00 | h | i | <-- note h, i
| 2 | 2018-01-01 12:20:00 | b | x |
| 3 | 2018-01-01 13:30:00 | c | z | <-- note z, not y
另外,实际上有 3 列(包括名称)是每个表中每一行的标识符。
是否需要迭代或者我可以通过其他方式进行迭代吗?我尝试了上一个问题中的所有答案,但我没有让它工作。非常感谢任何帮助!
【问题讨论】:
标签: google-bigquery