Questions tagged «gaps-and-islands»

19
SQL确定最少连续访问天数?
以下用户历史记录表包含给定用户每天(在UTC的24小时内)访问网站的每一条记录。它有成千上万条记录,但每个用户每天只有一条记录。如果用户当天没有访问该网站,则不会生成任何记录。 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重新开始;否则,序列将重新开始。我们正在寻找在此连续几天没有间断的用户。 当然,此查询与特定的Stack Overflow标志之间的任何相似之处纯属巧合。.::)

11
如何在MySQL中找到顺序编号中的空白?
我们有一个带有表的数据库,该表的值是从另一个系统导入的。有一个自动增量列,没有重复的值,但缺少值。例如,运行以下查询: select count(id) from arrc_vouchers where id between 1 and 100 应该返回100,但返回87。我可以运行任何查询来返回缺失数字的值吗?例如,可能存在ID为1-70和83-100的记录,但是没有ID为71-82的记录。我想返回71、72、73等。 这可能吗?

20
如何在SQL运行计数器中找到“差距”?
我想在SQL表的计数器列中找到第一个“间隙”。例如,如果有值1,2,4和5,我想找出3。 我当然可以按顺序获取值并手动进行处理,但是我想知道是否可以在SQL中进行处理。 另外,它应该是非常标准的SQL,可以与不同的DBMS一起使用。

20
获取两个日期之间的日期列表
使用标准的mysql函数可以编写查询,该查询将返回两个日期之间的天数列表。 例如给定2009-01-01和2009-01-13,它将返回一个具有以下值的列表: 2009-01-01 2009-01-02 2009-01-03 2009-01-04 2009-01-05 2009-01-06 2009-01-07 2009-01-08 2009-01-09 2009-01-10 2009-01-11 2009-01-12 2009-01-13 编辑:看来我还不清楚。我要生成此列表。我在数据库中存储了值(按日期时间),但希望将它们在左外部联接中汇总到上述日期列表中(我希望这种联接的某些右侧在几天内会为null并将对此进行处理) )。

5
MySQL如何填充范围内的缺失日期?
我有一个包含2列的表格,日期和分数。它最多有30个条目,最近30天内每个条目一个。 date score ----------------- 1.8.2010 19 2.8.2010 21 4.8.2010 14 7.8.2010 10 10.8.2010 14 我的问题是缺少某些日期-我想看看: date score ----------------- 1.8.2010 19 2.8.2010 21 3.8.2010 0 4.8.2010 14 5.8.2010 0 6.8.2010 0 7.8.2010 10 ... 我需要从单个查询中获取:19,21,9,14,0,0,10,0,0,14 ...这意味着缺失的日期填充有0。 我知道如何获取所有值,以及如何使用服务器端语言遍历日期和缺少空格。但这是否可以在mysql中完成,所以我可以按日期对结果进行排序并得到丢失的片段。 编辑:在此表中还有另一个名为UserID的列,所以我有30.000用户,其中一些在此表中具有得分。如果日期<30天前,我会每天删除日期,因为我需要为每个用户提供最近30天的分数。原因是我正在绘制过去30天的用户活动图,并绘制一个图表,我需要用逗号分隔的30个值。因此,我可以说在查询中获得USERID = 10203活动,查询将获得30分,最近30天中的每一分。我希望我现在更加清楚。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.