Google bigquery 基于使用BigQuery的给定条件,列_2中每个不同值的列_1值计数
我有一张像Google bigquery 基于使用BigQuery的给定条件,列_2中每个不同值的列_1值计数,google-bigquery,bigquery-standard-sql,Google Bigquery,Bigquery Standard Sql,我有一张像 date_1 | date_2 2018-12-08 | 2018-12-07 2018-12-09 | 2018-12-07 2018-12-13 | 2018-12-07 2018-12-16 | 2018-12-07 2018-12-14 | 2018-12-09 输出表应该如下所示: date_2 | count_of_date_1_after_date_2 2018-12-07 | 5 2018-12-09 | 3 我想要在日期2之后的日期1的计数 我试过并想出了这个答
date_1 | date_2
2018-12-08 | 2018-12-07
2018-12-09 | 2018-12-07
2018-12-13 | 2018-12-07
2018-12-16 | 2018-12-07
2018-12-14 | 2018-12-09
输出表应该如下所示:
date_2 | count_of_date_1_after_date_2
2018-12-07 | 5
2018-12-09 | 3
我想要在日期2之后的日期1的计数
我试过并想出了这个答案,但我不确定这是否是最好的方法。有更好的方法吗
WITH
sample_table AS (
SELECT DATE('2018-12-08') AS date_1, DATE('2018-12-07') AS date_2, 'AAA' as uid UNION ALL
SELECT DATE('2018-12-09') AS date_1, DATE('2018-12-07') AS date_2, 'AAA' as uid UNION ALL
SELECT DATE('2018-12-13') AS date_1, DATE('2018-12-07') AS date_2, 'AAA' as uid UNION ALL
SELECT DATE('2018-12-16') AS date_1, DATE('2018-12-07') AS date_2, 'AAA' as uid UNION ALL
SELECT DATE('2018-12-14') AS date_1, DATE('2018-12-09') AS date_2, 'AAA' as uid
),
distinct_date_2 AS (
SELECT DISTINCT(date_2) AS distinct_date, uid FROM sample_table
)
SELECT distinct_date, COUNTIF(date_1 > distinct_date)
FROM sample_table
LEFT JOIN distinct_date_2
USING (uid)
GROUP BY distinct_date
ORDER BY distinct_date
下面是BigQuery标准SQL
#standardSQL
SELECT date_2,
(SELECT COUNT(1) FROM t.arr date_1 WHERE date_1 > date_2) AS count_of_date_1_after_date_2
FROM (
SELECT date_2, ANY_VALUE(arr) arr
FROM (
SELECT date_2, ARRAY_AGG(date_1) OVER() arr
FROM `project.dataset.table`
)
GROUP BY date_2
) t
您可以使用问题中的示例数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2018-12-08' date_1, DATE '2018-12-07' date_2 UNION ALL
SELECT '2018-12-09', '2018-12-07' UNION ALL
SELECT '2018-12-13', '2018-12-07' UNION ALL
SELECT '2018-12-16', '2018-12-07' UNION ALL
SELECT '2018-12-14', '2018-12-09'
)
SELECT date_2,
(SELECT COUNT(1) FROM t.arr date_1 WHERE date_1 > date_2) AS count_of_date_1_after_date_2
FROM (
SELECT date_2, ANY_VALUE(arr) arr
FROM (
SELECT date_2, ARRAY_AGG(date_1) OVER() arr
FROM `project.dataset.table`
)
GROUP BY date_2
) t
结果
Row date_2 count_of_date_1_after_date_2
1 2018-12-07 5
2 2018-12-09 3
下面是BigQuery标准SQL
#standardSQL
SELECT date_2,
(SELECT COUNT(1) FROM t.arr date_1 WHERE date_1 > date_2) AS count_of_date_1_after_date_2
FROM (
SELECT date_2, ANY_VALUE(arr) arr
FROM (
SELECT date_2, ARRAY_AGG(date_1) OVER() arr
FROM `project.dataset.table`
)
GROUP BY date_2
) t
您可以使用问题中的示例数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2018-12-08' date_1, DATE '2018-12-07' date_2 UNION ALL
SELECT '2018-12-09', '2018-12-07' UNION ALL
SELECT '2018-12-13', '2018-12-07' UNION ALL
SELECT '2018-12-16', '2018-12-07' UNION ALL
SELECT '2018-12-14', '2018-12-09'
)
SELECT date_2,
(SELECT COUNT(1) FROM t.arr date_1 WHERE date_1 > date_2) AS count_of_date_1_after_date_2
FROM (
SELECT date_2, ANY_VALUE(arr) arr
FROM (
SELECT date_2, ARRAY_AGG(date_1) OVER() arr
FROM `project.dataset.table`
)
GROUP BY date_2
) t
结果
Row date_2 count_of_date_1_after_date_2
1 2018-12-07 5
2 2018-12-09 3
我想要列
date\u 1
中大于列date\u 2
中两个不同日期(2018-12-07、2018-12-09)的日期计数。我期待的结果是,2018-12-07的数字是5,2018-12-09的数字是3,明白了。请参阅更新的答案。好还是不好?至少它避免了加入:o)感谢您的确认。你看到它“更好”的迹象了吗?比如说表演什么的?如果有的话,你能分享一下吗o) 我想要列date\u 1
中大于列date\u 2
中两个不同日期(2018-12-07、2018-12-09)的日期计数。我期待的结果是,2018-12-07的数字是5,2018-12-09的数字是3,明白了。请参阅更新的答案。好还是不好?至少它避免了加入:o)感谢您的确认。你看到它“更好”的迹象了吗?比如说表演什么的?如果有的话,你能分享一下吗o)