如何在BigQuery中的两个时间戳之间提取独特的日期?

时间:2015-04-30 11:25:23

标签: timestamp google-bigquery

对于两个不同的时间戳,假设时间戳('2015-02-01')和时间戳('2015-02-12'),我想要一个包含所有日期的列。像这样(12排) 2015年2月1日 2015年2月2日 。 。 。 2015年2月12日

2 个答案:

答案 0 :(得分:3)

您可以使用公共数据集(fh-bigquery:geocode.numbers_65536)上的交叉联接来执行此操作,其中您的数字最多为:65536

SELECT date(DATE_ADD(DAY, i, "DAY")) DAY
FROM
  (SELECT '2015-01-01' AS DAY) a CROSS
JOIN
  (SELECT i
   FROM [fh-bigquery:geocode.numbers_65536]
   WHERE i<=abs(DATEDIFF('2015-01-01','2015-01-15'))) b
ORDER BY DAY ASC

此输出:

+-----+------------+---+
| Row |    day     |   |
+-----+------------+---+
|   1 | 2015-01-01 |   |
|   2 | 2015-01-02 |   |
|   3 | 2015-01-03 |   |
|   4 | 2015-01-04 |   |
|   5 | 2015-01-05 |   |
|   6 | 2015-01-06 |   |
|   7 | 2015-01-07 |   |
|   8 | 2015-01-08 |   |
|   9 | 2015-01-09 |   |
|  10 | 2015-01-10 |   |
|  11 | 2015-01-11 |   |
|  12 | 2015-01-12 |   |
|  13 | 2015-01-13 |   |
|  14 | 2015-01-14 |   |
|  15 | 2015-01-15 |   |
+-----+------------+---+

您可以使用项目菜单(项目名称旁边的下拉菜单,切换到项目➪显示项目)添加项目fh-bigquery,从而在BigQuery UI中将此数据添加到您的视图中。或者,您可以导航到BigQuery UI链接https://bigquery.cloud.google.com/project/fh-bigquery 添加项目后,示例数据集(fh-bigquery)将显示在导航面板中。

答案 1 :(得分:3)

@ Pentium10答案是填充范围的正确和经典方式。只是为了好玩,我还想提供一个不依赖任何附加表的替代方案。这个解决方案是这样的:

  1. 使用RPAD生成所需长度的字符串,即间隔中的天数
  2. 使用SPLIT将其转换为重复字段,其元素数等于间隔中的天数
  3. 使用POSITION获取重复字段中每个元素的顺序索引
  4. 以下是整个查询:

    select date(date_add(day, i, "DAY")) day
    from  (select '2015-01-01' day) a 
    cross join
    (select 
       position(
         split(
           rpad('', datediff('2015-01-15','2015-01-01')*2, 'a,'))) i 
     from (select NULL)) b;