如何在mysql表中查找连续间隔
我有一张表,上面有字段:personId,date personId+日期是唯一的,不能有两条日期和personId相同的记录 问题是:如何创建将显示连续访问间隔的mySQL查询 +----------+------------+------------+-------+ | personId | dateStart | dateEnd | count | +----------+------------+------------+-------+ | 1 | 2020-05-04 | 2020-05-06 | 3 | | 1 | 2020-05-08 | 2020-05-09 | 2 | | 2 | 2020-05-03 | 2020-05-04 | 2 | | 2 | 2020-05-07 | 2020-05-07 | 1 | +----------+------------+------------+-------+ 我发现了一些类似的问题,但它们都有一些特殊的差异,所以我不知道如何将它们应用到我的案例中,希望能根据我的表结构给出一个示例如何在mysql表中查找连续间隔,mysql,Mysql,我有一张表,上面有字段:personId,date personId+日期是唯一的,不能有两条日期和personId相同的记录 问题是:如何创建将显示连续访问间隔的mySQL查询 +----------+------------+------------+-------+ | personId | dateStart | dateEnd | count | +----------+------------+------------+-------+ | 1 | 2020-0
SELECT
pairs.person_id,
pairs.startDate,
pairs.endDate,
pairs.endDate - pairs.startDate + 1 as count
FROM
(SELECT
t1.person_id,
t1.date as startDate,
MIN(t3.date) as endDate
FROM visits as t1
LEFT JOIN visits as t2 ON
t1.person_id = t2.person_id AND
t1.date - t2.date = 1
LEFT JOIN visits as t3 ON
t1.person_id = t3.person_id AND
t1.date <= t3.date
LEFT JOIN visits as t4 ON
t3.person_id = t4.person_id AND
t3.date - t4.date = -1
WHERE ISNULL(t2.date) AND ISNULL(t4.date)
GROUP BY t1.person_id, t1.date
) as pairs
说明:
1我们发现记录t1没有以前的日期t2
2让t1记录与没有下一个日期的t3记录合并
3从t1开始的每个日期,让我们找到从t3开始的最小值
就是这样为什么2020-05-07和2020-05-07是连续的?他们是同一天同一排。@Barmar,只是因为。。。你有主键吗?@Mihai,personId+date是唯一的对那些试图帮助你的人礼貌一点也许是个好主意
SELECT
pairs.person_id,
pairs.startDate,
pairs.endDate,
pairs.endDate - pairs.startDate + 1 as count
FROM
(SELECT
t1.person_id,
t1.date as startDate,
MIN(t3.date) as endDate
FROM visits as t1
LEFT JOIN visits as t2 ON
t1.person_id = t2.person_id AND
t1.date - t2.date = 1
LEFT JOIN visits as t3 ON
t1.person_id = t3.person_id AND
t1.date <= t3.date
LEFT JOIN visits as t4 ON
t3.person_id = t4.person_id AND
t3.date - t4.date = -1
WHERE ISNULL(t2.date) AND ISNULL(t4.date)
GROUP BY t1.person_id, t1.date
) as pairs