【问题标题】:Bigquery: How can I merge 2 timestamp columns into 1 column?Bigquery:如何将 2 个时间戳列合并为 1 个列?
【发布时间】:2019-01-27 08:06:16
【问题描述】:

有人知道如何从 Google Bigquery 中的两个时间戳列创建一个时间戳列吗?

我有一个包含两个时间戳列的表,我想将这两列合并到一个列中。该表目前如下所示:

id  | user_id | created_at_a             | created_at_b
------------------------------------------------------------------
1   | 1       | 2019-01-24 12:20:00 UTC  | 2019-01-25 01:04:00 UTC
2   | 1       | 2019-01-24 12:20:00 UTC  | 2019-01-25 01:03:00 UTC
3   | 1       | 2019-01-24 12:22:00 UTC  | 2019-01-25 01:03:00 UTC
4   | 1       | 2019-01-24 12:22:00 UTC  | 2019-01-25 01:04:00 UTC
5   | 2       | 2019-01-24 20:48:00 UTC  | 2019-01-24 20:49:00 UTC
6   | 2       | 2019-01-24 11:21:00 UTC  | 2019-01-24 20:49:00 UTC

所以...我正在尝试将这两个时间戳列合并为一列。我的预期结果如下:

id  | user_id | created_at_a            
----------------------------------------
1   | 1       | 2019-01-24 12:20:00 UTC
2   | 1       | 2019-01-25 01:04:00 UTC
4   | 1       | 2019-01-25 01:03:00 UTC
5   | 1       | 2019-01-24 12:22:00 UTC
6   | 2       | 2019-01-24 20:48:00 UTC
7   | 2       | 2019-01-24 20:49:00 UTC
8   | 2       | 2019-01-24 11:21:00 UTC 

有人可以帮帮我吗。

非常感谢!

【问题讨论】:

  • “合并”是什么意思?预期的输出是什么..
  • 嗨@GrahamPolley 我已经更新了我的问题以包含我想要的结果。我只喜欢一个时间戳列,而不是两个时间戳列。

标签: google-bigquery bigquery-standard-sql


【解决方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT DISTINCT user_id, created_at
FROM (
  SELECT user_id, 
    ARRAY_CONCAT_AGG([created_at_a, created_at_b]) created_at_ab
  FROM `project.dataset.table`
  GROUP BY user_id
), UNNEST(created_at_ab) created_at

您可以使用您问题中的示例数据进行测试,如下所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 1 user_id, TIMESTAMP '2019-01-24 12:20:00 UTC' created_at_a, TIMESTAMP '2019-01-25 01:04:00 UTC' created_at_b UNION ALL
  SELECT 2, 1, '2019-01-24 12:20:00 UTC', '2019-01-25 01:03:00 UTC' UNION ALL
  SELECT 3, 1, '2019-01-24 12:22:00 UTC', '2019-01-25 01:03:00 UTC' UNION ALL
  SELECT 4, 1, '2019-01-24 12:22:00 UTC', '2019-01-25 01:04:00 UTC' UNION ALL
  SELECT 5, 2, '2019-01-24 20:48:00 UTC', '2019-01-24 20:49:00 UTC' UNION ALL
  SELECT 6, 2, '2019-01-24 11:21:00 UTC', '2019-01-24 20:49:00 UTC' 
)
SELECT DISTINCT user_id, created_at
FROM (
  SELECT user_id, 
    ARRAY_CONCAT_AGG([created_at_a, created_at_b]) created_at_ab
  FROM `project.dataset.table`
  GROUP BY user_id
), UNNEST(created_at_ab) created_at
-- ORDER BY user_id, created_at   

结果

Row user_id created_at   
1   1   2019-01-24 12:20:00 UTC  
2   1   2019-01-24 12:22:00 UTC  
3   1   2019-01-25 01:03:00 UTC  
4   1   2019-01-25 01:04:00 UTC  
5   2   2019-01-24 11:21:00 UTC  
6   2   2019-01-24 20:48:00 UTC  
7   2   2019-01-24 20:49:00 UTC    

【讨论】:

  • 谢谢米哈伊尔,你是救命稻草。
猜你喜欢
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2017-03-25
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2016-03-13
相关资源
最近更新 更多