【发布时间】:2010-11-13 15:27:44
【问题描述】:
以下用户历史记录表包含给定用户每天访问网站的一条记录(在 24 小时 UTC 时间段内)。它有数千条记录,但每个用户每天只有一条记录。如果用户当天没有访问该网站,则不会生成记录。
Id UserId CreationDate ------ ------ ------------ 750997 12 2009-07-07 18:42:20.723 750998 15 2009-07-07 18:42:20.927 751000 19 2009-07-07 18:42:22.283我正在寻找的是对该表的 SQL 查询性能良好,它告诉我哪些用户 ID 连续 (n) 天访问该网站而没有错过任何一天。
换句话说,有多少用户在此表中有 (n) 条记录,且具有连续(前一天或后一天)日期?如果序列中缺少任何一天,则序列中断,应从 1 重新开始;我们正在寻找在此处连续使用天数且没有间隔的用户。
此查询与a particular Stack Overflow badge 之间的任何相似之处当然纯属巧合.. :)
【问题讨论】:
-
我在 28(
-
您的日期是否存储为 UTC?如果是这样,如果加州居民在一天上午 8 点访问该站点,然后在第二天晚上 8 点访问该站点,会发生什么情况?尽管他/她在太平洋时区连续访问了几天,但由于数据库将时间存储为 UTC,因此不会将其记录在数据库中。
标签: sql sql-server date gaps-and-islands