我在试着计算人们在一个地方花了多少时间.为此,我们有node_address
代表一个人,areaName
和时间,当人被看到.
Original Data
date | areaName | node_address/person |
---|---|---|
8:15 | area1 | 1 |
8:20 | area1 | 1 |
8:25 | area1 | 1 |
8:30 | area1 | 1 |
8:45 | area1 | 1 |
9:00 | area1 | 1 |
8:15 | area2 | 2 |
8:20 | area2 | 2 |
9:00 | area2 | 1 |
9:05 | area2 | 2 |
9:10 | area2 | 2 |
Expected Data
areaName | time
area1 | 25 min
area2 | 15 min
这些时间的理由是以下条件:
人1在area1
内从8:15到8:30—15分钟(因为被看到的间隔小于10分钟),也被看到在8:45—5分钟(它被认为是5分钟,因为它只有一次,没有其他记录小于10分钟),9:00—5分钟.
同样的人2,是在area2
从8:15到8:20—5分钟,并被看到从9:00到9:10—10分钟.
我能够开发一个查询,以获得上一个时间和下一个时间的差异,我也做了一个验证,以判断它是否比较同一个人:
SELECT
date,
node_address,
areaName,
CASE
WHEN node_address = LAG(node_address) OVER (ORDER BY areaName, node_address, date)
THEN DATETIME_DIFF(date, LAG(date) OVER (ORDER BY areaName, node_address, date), MINUTE)
ELSE NULL
END AS PrevDiff,
CASE
WHEN node_address = LEAD(node_address) OVER (ORDER BY areaName, node_address, date)
THEN DATETIME_DIFF(LEAD(date) OVER (ORDER BY areaName, node_address, date), date, MINUTE)
ELSE NULL
END AS NextDiff
FROM . . .
(但我无法找到这样的计算方法)