我有两个带有时间戳数据的事件表:已注册,已签名。
两者都具有以下行,例如:original_timestamp,user_id
我试图找出在注册后30天内未登录的用户。我使用了以下查询,但是无法向其中添加WHERE子句。
我尝试查询,但每小时差额增加,而我想获得BigQuery不支持的天差额。
SELECT Signed_In.user_id, TIMESTAMP_DIFF(Registered.original_timestamp, Signed_In.original_timestamp, HOUR) AS days_difference
FROM `test_db.Signed_In` signed_in
JOIN `test_db.Registered` registered
ON Signed_In.user_id = Registered.user_id
GROUP BY 1,2
ORDER BY 2 DESC
WHERE days_difference > '30'
我得到两列:user_id,days_difference,但是days_difference显示小时数,并且使用时我的WHERE子句被拒绝。
答案 0 :(得分:2)
只需将query中的done
替换为HOUR
:
DAY
SELECT Signed_In.user_id, TIMESTAMP_DIFF(Registered.original_timestamp, Signed_In.original_timestamp, DAY) AS days_difference
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
:返回日期的星期数,范围为[0,53]。星期从星期日开始,而一年中第一个星期日之前的日期在星期0中。WEEK
:返回WEEK(<WEEKDAY>)
的星期数,范围为[0,53]。几周从timestamp_expression
开始。一年的第一个WEEKDAY
之前的datetime
处于第0周。WEEKDAY
的有效值为WEEKDAY
,SUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
和FRIDAY
。SATURDAY
:返回ISOWEEK
的{{3}}周号。datetime_expression
周一开始。返回值在[1,53]范围内。每个ISO年份的第一个ISOWEEK
从公历年份的第一个星期四之前的星期一开始。ISOWEEK
MONTH
QUARTER
YEAR
:返回ISO 8601的星期编号年份,它是公历,其中包含ISOYEAR
所属的星期四。date_expression
DATE
DATETIME
答案 1 :(得分:2)
您可以在下面的代码中尝试此操作-
注意:对GROUP BY和ORDER BY使用顺序位置不是一个好习惯。直接使用列名称始终是安全和标准的。
D2