您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL:按连续天数分组并计数组

MySQL:按连续天数分组并计数组

您可以通过查找前一天没有签到的签到来找到每次访问的第一天。

select count(distinct date(start_of_visit.datetime))
from checkin start_of_visit
left join checkin prevIoUs_day
    on start_of_visit.user = prevIoUs_day.user
    and start_of_visit.city = prevIoUs_day.city
    and date(start_of_visit.datetime) - interval 1 day = date(prevIoUs_day.datetime)
where prevIoUs_day.id is null

查询有几个重要部分。

首先,每个签入都与前一天的任何签入相结合。但由于它是外部联接,如果前一天没有签入,联接的右侧将有NULL结果。该WHERE过滤发生在加盟之后,所以只保留那些签入从左侧那里有从右侧无。 LEFT OUTER JOIN/WHERE IS NULL对于发现那里的东西非常方便。

然后它会计算签到日期,以确保如果用户在访问的第一天多次签到,它不会重复计算。(当我发现可能的错误时,我实际上在编辑时添加了该部分。)

编辑:我刚刚重新阅读了您针对第一个问题提出的查询。您的查询将获得给定日期的签到次数,而不是日期计数。我认为你想要这样的东西:

select count(distinct date(datetime))
from checkin
where user='some user' and city='some city'
MySQL 2022/1/1 18:26:04 有490人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶