【问题标题】:Calculate Month Difference in Google BigQuery计算 Google BigQuery 中的月差
【发布时间】:2015-03-08 23:04:41
【问题描述】:

BigQuery 不允许您在 DATEDIFF 中选择时段 MONTH。

在 BigQuery 中有没有其他方法可以做到这一点。

我可以使用以下但不是几个月来获得天差。

SELECT 
  OrderID,
  OrderDate,
  STRING( YEAR ( OrderDate )) + '-' + STRING(MONTH ( OrderDate )) as order_month, 
  UserID,
  FirstOrderDate
DATEDIFF( OrderDate, FirstOrderDate) as date_diff,
FROM [orders.orders] 
WHERE FirstOrderDate > DATE_ADD(CURRENT_TIMESTAMP(), -1, 'YEAR')

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    使用标准 SQL,您可以使用 date_diff:

    #StandardSQL
    select date_diff(current_date, date '2018-03-06', month)
    

    【讨论】:

    • 这会触发一个错误:codeDATE_DIFF 不支持 [n:m]code 的 MONTH 日期部分,这很奇怪,因为 docs 中没有提到它
    • 对于其他收到@academy- 错误的人,您可能在 date_diff 中使用了时间戳而不是日期
    • 是的!对于时间戳,使用timestamp_diff
    【解决方案2】:

    这个怎么样?

    (12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
        + IF (DAY(t2) >= DAY(t1), 0, -1)
    

    通过几个示例运行它,它看起来就像您想要的那样:

    SELECT 
    (12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
        + IF (DAY(t2) >= DAY(t1), 0, -1)
    FROM 
        (SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-01-01") as t2), // 1
        (SELECT TIMESTAMP("2010-12-02") as t1, TIMESTAMP("2011-01-01") as t2), // 0
        (SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-12-01") as t2), // 12
        (SELECT TIMESTAMP("2010-10-21") as t1, TIMESTAMP("2015-01-10") as t2)  // 50
    

    【讨论】:

    • 谢谢乔丹。那行得通,但我真正在寻找的是,如果第二个值落在不同的月份,它应该根据相隔的月份来计算。例如。 (SELECT TIMESTAMP("2010-12-02") as t1, TIMESTAMP("2011-01-01") as t2) 应该在下个月返回 1
    • 在这种情况下,您只需删除+ IF(DAY...) 子句,如果时间戳在不同月份,它将报告差异。
    【解决方案3】:

    使用标准 SQL date_diff 可以工作,但如果您收到错误消息“DATE_DIFF 不支持 [n:m] 代码处的 MONTH 日期部分”,那是因为您的它是时间戳而不是日期。要解决这个问题,首先将时间戳转换为日期,然后使用 date_diff 函数。 例如:

    DATE_DIFF(CAST(OrderDate AS DATE), CAST(FirstOrderDate AS DATE), month) AS DATE_DIF
    
    

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 2015-12-11
      • 2015-06-17
      • 2014-08-10
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2021-02-18
      相关资源
      最近更新 更多