Google bigquery 大查询-如何扩展每个公司列中的值,以使用现有值填充每个公司列中的所有空值?

Google bigquery 大查询-如何扩展每个公司列中的值,以使用现有值填充每个公司列中的所有空值?,google-bigquery,Google Bigquery,我使用的表如下所示(底部提供了在您的环境中复制此表的查询): 在我的虚拟表中,timestamp\u signup仅在每个id的1行上出现(它出现在显示公司注册的在线会话的行上)。如果一家公司从未注册,则没有timestamp\u signup值 我想做的是计算 每个团队总共有多少页面浏览量 在一个团队注册之前,每个团队有多少页面浏览量(timestamp_page_view试试这个: with mytable as ( SELECT 1 AS id, '2021-04-17 17:01:

我使用的表如下所示(底部提供了在您的环境中复制此表的查询):

在我的虚拟表中,
timestamp\u signup
仅在每个id的1行上出现(它出现在显示公司注册的在线会话的行上)。如果一家公司从未注册,则没有
timestamp\u signup

我想做的是计算

  • 每个团队总共有多少页面浏览量
  • 在一个团队注册之前,每个团队有多少页面浏览量(timestamp_page_view试试这个:

    with mytable as (
      SELECT 1 AS id, '2021-04-17 17:01:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 1 AS id, '2021-04-16 14:31:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-14 21:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-13 11:15:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 1 AS id, '2021-04-12 14:57:00' AS timestamp_page_view, '2021-04-12 14:59:00' AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-09 11:33:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-05 14:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-03-31 17:12:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 2 AS id, '2021-03-31 17:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-31 12:45:00' AS timestamp_page_view, '2021-03-31 12:45:00' AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-30 04:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 2 AS id, '2021-03-29 19:47:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-28 17:16:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-27 14:00:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-18 18:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-03 15:54:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-02-27 21:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-13 13:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-12 12:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-30 17:17:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-18 14:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-19 14:50:00' AS timestamp_page_view, '2021-04-19 14:54:00' AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-20 17:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-30 15:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-03 09:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-29 10:10:00' AS timestamp_page_view, NULL AS timestamp_signup
    )
    select 
      id,
      countif(future_signup is not null) as views_before_signup,
      count(*) as total_views
    from (
      select 
        *,
        max(timestamp_signup) over (partition by id order by timestamp_page_view desc) as future_signup
      from mytable
    )
    group by id
    

    谢谢,这是可行的。我会把你的答案分解一下,以便我能从你的知识中学习。如果你认为这对社区有帮助并且写得好,请考虑一下这个问题。
     id     total_views     views_before_signup
        
        1          4                   8
        2          5                   6
        3          0                   5
        4          6                   7
    
     SELECT id,
            COUNT(timestamp_page_view) AS total_views, 
            SUM(CASE WHEN timestamp_page_view <= timestamp_signup THEN 1 ELSE 0 END) AS views_before_signups,
    FROM table_1 
    GROUP BY id
    
    SELECT 1 AS id, '2021-04-17 17:01:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
    SELECT 1 AS id, '2021-04-16 14:31:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 1 AS id, '2021-04-14 21:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 1 AS id, '2021-04-13 11:15:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
    SELECT 1 AS id, '2021-04-12 14:57:00' AS timestamp_page_view, '2021-04-12 14:59:00' AS timestamp_signup UNION ALL 
    SELECT 1 AS id, '2021-04-09 11:33:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 1 AS id, '2021-04-05 14:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 1 AS id, '2021-03-31 17:12:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
    SELECT 2 AS id, '2021-03-31 17:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 2 AS id, '2021-03-31 12:45:00' AS timestamp_page_view, '2021-03-31 12:45:00' AS timestamp_signup UNION ALL 
    SELECT 2 AS id, '2021-03-30 04:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
    SELECT 2 AS id, '2021-03-29 19:47:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 2 AS id, '2021-03-28 17:16:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 2 AS id, '2021-03-27 14:00:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 3 AS id, '2021-03-18 18:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 3 AS id, '2021-03-03 15:54:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 3 AS id, '2021-02-27 21:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 3 AS id, '2021-03-13 13:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 3 AS id, '2021-03-12 12:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-03-30 17:17:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-04-18 14:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-04-19 14:50:00' AS timestamp_page_view, '2021-04-19 14:54:00' AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-04-20 17:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-03-30 15:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-03-03 09:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
    SELECT 4 AS id, '2021-03-29 10:10:00' AS timestamp_page_view, NULL AS timestamp_signup
    
    with mytable as (
      SELECT 1 AS id, '2021-04-17 17:01:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 1 AS id, '2021-04-16 14:31:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-14 21:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-13 11:15:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 1 AS id, '2021-04-12 14:57:00' AS timestamp_page_view, '2021-04-12 14:59:00' AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-09 11:33:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-04-05 14:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 1 AS id, '2021-03-31 17:12:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 2 AS id, '2021-03-31 17:13:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-31 12:45:00' AS timestamp_page_view, '2021-03-31 12:45:00' AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-30 04:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL
      SELECT 2 AS id, '2021-03-29 19:47:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-28 17:16:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 2 AS id, '2021-03-27 14:00:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-18 18:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-03 15:54:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-02-27 21:44:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-13 13:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 3 AS id, '2021-03-12 12:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-30 17:17:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-18 14:14:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-19 14:50:00' AS timestamp_page_view, '2021-04-19 14:54:00' AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-04-20 17:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-30 15:56:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-03 09:18:00' AS timestamp_page_view, NULL AS timestamp_signup UNION ALL 
      SELECT 4 AS id, '2021-03-29 10:10:00' AS timestamp_page_view, NULL AS timestamp_signup
    )
    select 
      id,
      countif(future_signup is not null) as views_before_signup,
      count(*) as total_views
    from (
      select 
        *,
        max(timestamp_signup) over (partition by id order by timestamp_page_view desc) as future_signup
      from mytable
    )
    group by id