我的表格如下所示:
col1 | col2 | col3 | col4
A | 1 | 2 | 4
A | 2 | 5 | 3
A | 5 | 1 | 6
B | 3 | 1 | 2
B | 4 | 4 | 4
我有另一张表,其中记录是唯一的,如下所示:
col1 | col2
A | 2
B | 1
我想以Table 1
的方式查询n
,根据类别Table 1
中的值,为Table 2
中的每个类别仅过滤Table 2
条记录数}。
根据A
,我需要为B
提取2条记录,为col1 | col2 | col3 | col4
A | 2 | 5 | 3
A | 1 | 2 | 4
B | 3 | 1 | 2
提取1条记录。我需要生成的查询表如下所示:
col4
记录的选择基于按升序排序的=ISBLANK($A1)
。我目前正在尝试在BigQuery上执行此操作。
答案 0 :(得分:2)
您可以使用row_number()
和join
:
select t1.col1, t1.col2, t1.col3, t1.col4
from (select t1.*, row_number() over (partition by col1 order by col4) as seqnum
from table1 t1
) t1 join
table2 t2
on t2.col1 = t1.col1 and t1.seqnum <= t2.col2
order by t1.col1, t1.col4;
答案 1 :(得分:1)
以下是BigQuery Standard SQL
#standardSQL
WITH `table1` AS (
SELECT 'A' col1, 1 col2, 2 col3, 4 col4 UNION ALL
SELECT 'A', 2, 5, 3 UNION ALL
SELECT 'A', 5, 1, 6 UNION ALL
SELECT 'B', 3, 1, 2 UNION ALL
SELECT 'B', 4, 4, 4
), `table2` AS (
SELECT 'A' col1, 2 col2 UNION ALL
SELECT 'B', 1
)
SELECT t.*
FROM (
SELECT ARRAY_AGG(t1 ORDER BY t1.col4) arr, MIN(t2.col2) cnt
FROM table1 t1 JOIN table2 t2 ON t1.col1 = t2.col1
GROUP BY t1.col1
), UNNEST(arr) t WITH OFFSET num
WHERE num < cnt
您可以使用问题中的虚拟数据进行测试/播放,如下所示
Row col1 col2 col3 col4
1 A 2 5 3
2 A 1 2 4
3 B 3 1 2
输出为
dtype_dict ={'airtime':np.float32, 'Cancelled':np.uint8 ....