【发布时间】:2018-08-31 22:20:27
【问题描述】:
使用标准 SQL/BQ,但试图找出一种方法来获取每个用户连续日期的两个时间戳之间的平均差异?
我的数据如下:
UserId Login
0 2016-07-14 14:43:30 +0000
2 2018-07-09 17:19:55 +0000
2 2018-07-10 20:38:37 +0000
2 2014-07-12 17:37:20 +0000
2 2018-07-13 01:08:20 +0000
3 2015-12-04 17:17:41 +0000
3 2015-12-04 20:14:43 +0000
所以此时我有:
SELECT UserId
,CASE WHEN(
(Magic)
THEN AVG(TIMESTAMP_DIFF(Login2, Login, HOUR) ELSE NULL END))) AS hours
FROM TABLE
GROUP BY 1
(魔术)部分是卡住的部分,我想指定每个用户的日期是否连续,然后取最新登录日期的差并减去当前登录日期。我可以申请一个滞后并说如果下一个日期和第一个日期之间的差异在一天之内,那么这是连续的吗?或者是否有分区/窗口函数方法?
Login2 将是下一个连续日期的第二个登录时间戳。
我想要的结果:
UserId Average Hours between Consecutive Logins
0 NULL
2 17.5 hours
3 3 hours
- 对于 UserId 0,它为 NULL,因为没有第二次登录时间可比较。
- 对于 UserId 2,它获取两个连续登录日期(07/09 - 07/10 和 07/12 - 07/13)的平均值(27 小时 + 8 小时 / 2)= 5.5 小时
- 对于UserId 3,同一天登录的一个数据点相差3小时,符合连续条件,得到一个数据点的平均差异
【问题讨论】:
-
。 .请编辑您的问题并显示您想要获得的结果。您的问题提到了日期之间的差异,但您的行有多个日期。很难弄清楚你想做什么。
-
感谢收看,立即编辑
-
@GordonLinoff 已编辑。应该抓住这一点,改变我的问题 - 但理想的结果就在那里。
-
。 .我还是不明白。用户 2 在连续日期有 2 次登录。这些相隔大约 27 小时。我看不出 5.5 是从哪里来的。
-
@GordonLinoff 道歉!固定!
标签: sql google-bigquery