2015-01-10 107 views
1

BigQuery不允许您选择DATEDIFF中的daypart MONTH。计算Google BigQuery中的月份差异

有什么其他的方法可以在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') 

回答

4

这个怎么样?

(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 
+0

感谢乔丹。这有效,但我实际上正在寻找的是,如果第二个值落在不同的月份,它应该基于相隔几个月来计算。 例如。 (SELECT TIMESTAMP(“2010-12-02”)作为t1,TIMESTAMP(“2011-01-01”)作为t2)应该返回1作为其在下个月 – tfayyaz

+0

在这种情况下,你可以删除'+ IF (DAY ...)'子句,如果时间戳在不同的月份,它会报告差异。 –

+0

非常感谢 – tfayyaz