mysql:基于扫码记录查找密接人员

以下部分函数基于mysql8.0使用

nba2k2球员数据

nba2k2球员数据

-- 每个用户在每个区域的行动轨迹(在某个区域的开始时间 以及 结束时间)
WITH tmp AS (
SELECT uid, area, scan_time, ROW_NUMBER() OVER (PARTITION BY uid ORDER BY scan_time) - ROW_NUMBER() OVER (PARTITION BY uid, area ORDER BY scan_time) diff
FROM trail
),

SELECT uid, area, min(scan_time) start_time, max(scan_time) end_time
FROM tmp
GROUP BY uid, area, diff

nba2k2球员数据

nba2k2球员数据

-- 核酸检测阳性,查找时空伴随人员。
WITH tmp AS (
SELECT uid, area, scan_time, ROW_NUMBER() OVER (PARTITION BY uid ORDER BY scan_time) - ROW_NUMBER() OVER (PARTITION BY uid, area ORDER BY scan_time) diff
FROM trail
),
tmp2 AS (
SELECT uid, area, min(scan_time) start_time, max(scan_time) end_time
FROM tmp
GROUP BY uid, area, diff
HAVING min(scan_time) + INTERVAL 30 MINUTE <= max(scan_time)
),
--以上得出在某个区域的开始时间 以及 结束时间
SELECT *
FROM tmp2 u1
JOIN tmp2 u2 ON (u1.uid <> u2.uid AND u1.area = u2.area AND u1.start_time + INTERVAL 10 MINUTE <= u2.end_time AND u2.start_time + INTERVAL 10 MINUTE <= u1.end_time)
WHERE u1.uid = '1301111111'

nba2k2球员数据


nba2k2球员数据
请先登录后发表评论
  • 最新评论
  • 总共0条评论