[求助] 如何用 SQL(或者其他方式)实现这个要求(内详)

2019 年 8 月 6 日
 2bin

数据格式如下: https://sm.ms/image/42rhuonQbDZYT1S

需求:汇总不同楼层的逗留时长。

想了下没有合适的办法,各位 v 友有没有好的办法,请赐教

2191 次点击
所在节点    问与答
23 条回复
dovme
2019 年 8 月 6 日
各个字段什么意思? t_time rank row_number
ebony0319
2019 年 8 月 6 日
其实就是开窗函数。
leishi1313
2019 年 8 月 6 日
逗留时长?那通过哪列能知道是进还是出啊
ebony0319
2019 年 8 月 6 日
sorry,审题错误。
ebony0319
2019 年 8 月 6 日
这是一个运动轨迹,代表各个时间段到达楼层的时间?
2bin
2019 年 8 月 6 日
@dovme t_time: 在某楼层的时间点,rank:按楼层分组按 t_time 升序的排名,row_numer:行号。只看前三列就好,后面是我处理的
2bin
2019 年 8 月 6 日
@ebony0319 是的
taotaodaddy
2019 年 8 月 6 日
每天的每楼层逗留时长:按天和楼层 group by,计算 max 时间-min 时间
2bin
2019 年 8 月 6 日
@leishi1313 不论进出,逗留时长=最大时间-最大时间
2bin
2019 年 8 月 6 日
@taotaodaddy 试过这样不行,这样会重复算时长,比如说 1:00-2:00 在一楼,2:00-3:00 在二楼,4:00-5:00 又回到一楼。
taotaodaddy
2019 年 8 月 6 日
@2bin 酱紫哦,那就复杂一些了,建议不用一条 sql 来实现,用 python 写代码计算吧
2bin
2019 年 8 月 6 日
@2bin 打错,最大时间-最小时间
stelpen
2019 年 8 月 6 日
自连接,on 楼层相等,rankno = rankno+1,取出两个时间,然后 group by 楼层,sum 俩时间差。应该可以,不知道描述清楚没
leishi1313
2019 年 8 月 6 日
@2bin 如果每一条都是严格按时间增长的,可以先找出每个楼层的最小最大时间,这个用一群 where 和 row_number 可以搞定,然后参考这个:dba.stackexchange.com/questions/90987/querying-sums-of-grouped-consecutive-rows-in-postgresql-9 做最近两条的一个相减就好了。
taotaodaddy
2019 年 8 月 6 日
跳跃一下,能改表结构不,加一个进出楼层标志列,这样统计起来就简单多了
loading
2019 年 8 月 6 日
sql 不熟悉就先用手工模拟算一次,然后写成程序吧。
用自连接 sql 应该是可以的。
2bin
2019 年 8 月 6 日
@taotaodaddy 谢谢,Python 我用的不熟,有思路可以提供吗
2bin
2019 年 8 月 6 日
@stelpen 谢谢,我模拟一下
taotaodaddy
2019 年 8 月 6 日
@2bin python 只是举例,可以用你任何擅长的语言,java,php 都可以
2bin
2019 年 8 月 6 日
@leishi1313 @loading 感谢♪(・ω・)ノ,我试一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX