使用WHERE子句的时间戳事件行的差异

时间:2019-08-04 05:52:17

标签: sql google-bigquery

我有两个带有时间戳数据的事件表:已注册,已签名。

两者都具有以下行,例如: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子句被拒绝。

2 个答案:

答案 0 :(得分:2)

只需将query中的done替换为HOUR

DAY

Correct values are

  
      
  • 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的有效值为WEEKDAYSUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAY
  •   
  • 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