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

Sql 使用WHERE子句时时间戳事件行的差异,sql,google-bigquery,Sql,Google Bigquery,我有两个带有时间戳数据的事件表:已注册、已登录 两者都有行,例如:原始\u时间戳、用户\u id 我试图找出那些在注册后30天内没有登录的用户。我使用了以下查询,但无法向其中添加WHERE子句 我尝试了一个查询,但我得到的是小时差,而我想要的是天差,这在BigQuery中是不受支持的 SELECT Signed_In.user_id, TIMESTAMP_DIFF(Registered.original_timestamp, Signed_In.original_timestamp, HOUR)

我有两个带有时间戳数据的事件表:已注册、已登录

两者都有行,例如:原始\u时间戳、用户\u 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\u id,days\u difference,但days\u difference显示小时数,我在使用WHERE子句时会被拒绝。

只需在您的:

选择Signed_In.user_id、TIMESTAMP_differegistered.original_TIMESTAMP、Signed_In.original_TIMESTAMP、days AS days_difference

:

微秒 毫秒 第二 分钟 小时 星期五 白天 每日 WEEK:返回[0,53]范围内日期的周数。周从星期日开始,一年中第一个星期日之前的日期在第0周。 WEEK:返回[0,53]范围内时间戳_表达式的周数。周从工作日开始。一年中第一个工作日之前的日期时间在第0周。工作日的有效值为星期日、星期一、星期二、星期三、星期四、星期五和星期六。 ISOWEEK:返回datetime_表达式的周数。本周从周一开始。返回值的范围为[1,53]。每个ISO年的第一个ISO周从公历年第一个星期四之前的星期一开始。 月 一刻钟 年 ISOYEAR:返回周编号年份,即公历年,包含日期表达式所属周的星期四。 日期 日期时间 时间
您可以尝试以下代码-

注意:对分组依据和排序依据使用序号位置不是一种好做法。直接使用列名总是安全和标准的

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 
WHERE DATE_DIFF(Registered.original_timestamp, Signed_In.original_timestamp, Day) > '30'
GROUP BY 1,2
ORDER BY 2 DESC

WHERE条款呢?要找到30天的差异?同时,它也给了我奇怪的结果:我添加了:WHERE DATERegister.original_timestamp>=2019-01-01,我得到了600天的差异,用户无法在2019年的任何时候注册,并在2年后打开他们的应用程序xDGives:语法错误:意外关键字WHERE at[20:1]请检查WHERE DateDifRegister.original_timestamp,Signed_In.original_timestamp,Day>30查询结束时不接受WHERE子句。Opss!!WHERE子句应位于GROUP by之前。很抱歉忽略了这一点。你现在能查一下更改的代码吗?带有日期和差异选项。