|
dovmeAug 6, 2019
1
各个字段什么意思? t_time rank row_number
|
|
ebony0319Aug 6, 2019
2
其实就是开窗函数。
|
|
leishi1313Aug 6, 2019
3
逗留时长?那通过哪列能知道是进还是出啊
|
|
ebony0319Aug 6, 2019
4
sorry,审题错误。
|
|
ebony0319Aug 6, 2019
5
这是一个运动轨迹,代表各个时间段到达楼层的时间?
|
|
taotaodaddyAug 6, 2019 via Android
8
每天的每楼层逗留时长:按天和楼层 group by,计算 max 时间-min 时间
|
|
9
@leishi1313 不论进出,逗留时长=最大时间-最大时间
|
|
10
@taotaodaddy 试过这样不行,这样会重复算时长,比如说 1:00-2:00 在一楼,2:00-3:00 在二楼,4:00-5:00 又回到一楼。
|
|
taotaodaddyAug 6, 2019 via Android
11
@2bin 酱紫哦,那就复杂一些了,建议不用一条 sql 来实现,用 python 写代码计算吧
|
|
stelpenAug 6, 2019 via Android
13
自连接,on 楼层相等,rankno = rankno+1,取出两个时间,然后 group by 楼层,sum 俩时间差。应该可以,不知道描述清楚没
|
|
leishi1313Aug 6, 2019
14
@2bin 如果每一条都是严格按时间增长的,可以先找出每个楼层的最小最大时间,这个用一群 where 和 row_number 可以搞定,然后参考这个:dba.stackexchange.com/questions/90987/querying-sums-of-grouped-consecutive-rows-in-postgresql-9 做最近两条的一个相减就好了。
|
|
taotaodaddyAug 6, 2019 via Android
15
跳跃一下,能改表结构不,加一个进出楼层标志列,这样统计起来就简单多了
|
|
loadingAug 6, 2019 via Android
16
sql 不熟悉就先用手工模拟算一次,然后写成程序吧。
用自连接 sql 应该是可以的。 |
|
17
@taotaodaddy 谢谢,Python 我用的不熟,有思路可以提供吗
|
|
taotaodaddyAug 6, 2019 via Android
19
@2bin python 只是举例,可以用你任何擅长的语言,java,php 都可以
|
|
20
@leishi1313 @loading 感谢♪(・ω・)ノ,我试一下
|
|
su2018Aug 6, 2019
21
不知道符不符合你要求
SELECT t.floor, SUM(t.wait_time)wait_time,t.floor_index FROM ( SELECT visit_date,FLOOR,TIME_TO_SEC(TIMEDIFF(t_time,@startTime)) wait_time,@startTime:=t_time,IF(a.floor=@floor,@index,@index:=@index+1),@index floor_index,@floor := a.floor FROM test1 a,(SELECT @startTime := '') AS b,(SELECT @floor :=0) AS c,(SELECT @index :=0) AS d WHERE 1 ORDER BY t_time ) t GROUP BY t.floor_index |
|
x66Aug 6, 2019
22
row_number 根据 t_time 排序,然后自连接 a.row_number = b.row_number +1 ,然后 group by floor,求差再求和就好了
|
|
zhuangguAug 6, 2019
23
select floor
,sum(next_time-t_time) as ts from ( select floor ,t_time ,lead(t_time,1) over(partition by floor order by t_time ) as next_time from tablename ) t group by floor; |