有一个访问数据表:
uid (INT) | created_at (DATETIME)
Run Code Online (Sandbox Code Playgroud)
我想查找用户连续多少天访问过我们的应用.例如:
SELECT DISTINCT DATE(created_at) AS d FROM visits WHERE uid = 123
Run Code Online (Sandbox Code Playgroud)
将返回:
d
------------
2012-04-28
2012-04-29
2012-04-30
2012-05-03
2012-05-04
Run Code Online (Sandbox Code Playgroud)
有5个记录和两个间隔 - 3天(4月28日至30日)和2天(5月3日至4日).
我的问题是如何找到用户连续访问应用程序的最大天数(示例中为3天).试图在SQL文档中找到合适的函数,但没有成功.我错过了什么吗?
UPD: 谢谢你们的回答!实际上,我正在使用vertica分析数据库(http://vertica.com/),但这是一个非常罕见的解决方案,只有少数人有使用它的经验.虽然它支持SQL-99标准.
那么,大多数解决方案只需稍作修改即可.最后我创建了自己的查询版本:
-- returns starts of the vitit series
SELECT t1.d as s FROM testing t1
LEFT JOIN testing t2 ON DATE(t2.d) = DATE(TIMESTAMPADD('day', -1, t1.d))
WHERE t2.d is null GROUP BY t1.d
s
---------------------
2012-04-28 01:00:00
2012-05-03 01:00:00
-- returns end of the vitit series
SELECT t1.d as …Run Code Online (Sandbox Code Playgroud)