我有 2 个带有列的表格,如下所示:
表A
rows, key_a, date_a
1, 'k1', '2015-11-12'
2, 'k2', '2015-11-20'
3, 'k3', '2015-12-01'
表B
row, key_b, date_b, Code
1, 'k1', '2015-10-12', C1
2, 'k1', '2015-09-12', C2
3, 'k1', '2015-11-01', C3
4, 'k1', '2015-10-20', C4
5, 'k1', '2015-08-19', C5
6, 'k1', '2015-11-02', C6
7, 'k2', '2015-10-12', C7
8, 'k2', '2015-09-12', C8
9, 'k2', '2015-11-01', C9
10, 'k2', '2015-10-20', C10
11, 'k2', '2015-08-19', C11
12, 'k2', '2015-11-02', C12
13, 'k3', '2015-10-12', C13
14, 'k3', '2015-09-12', C14
15, 'k3', '2015-11-01', C15
16, 'k3', '2015-10-20', C16
17, 'k3', '2015-08-19', C17
18, 'k3', '2015-11-02', C18
我想查找表 B 中的行,其中 date_b
首先具有相同的 key_b
,并且仅选择表 B 中 date_b
之间的数据date_a
到 date_a - 30
意思是:
'k1' => '2015-11-12' to '2015-10-12' => rows view (1,3,4,6)
'k2' => '2015-11-20' to '2015-10-20' => rows view (9,10,12)
'k3' => '2015-12-01' to '2015-11-01' => rows view (15,18)
结果
key_a, date_a, Code
'k1', '2015-11-12', C1
'k2', '2015-11-20', C10
'k3', '2015-12-01', C15
我该怎么做?
最佳答案
SELECT key_a, date_a, code
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY key_a ORDER BY date_b) AS num
FROM (
SELECT key_a, date_a, date_b, code,
FROM table_a AS a
JOIN table_b AS b
ON a.key_a = b.key_b
WHERE date_b BETWEEN DATE(DATE_ADD(TIMESTAMP(date_a), -1, "MONTH")) AND date_a
)
)
WHERE num = 1
ORDER BY key_a
结果:
key_a date_a code
k1 2015-11-12 C1
k2 2015-11-20 C10
k3 2015-12-01 C15
关于google-bigquery - 将 2 个表与每行之间的日期映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083801/