如何解决减去行并创建带有结果的新列
我对 MysqL 中的一个 sql 查询有疑问。我的表格如下所示:
Index User Date Speed
1 X 2018-01-01 10:00:00 23
1 X 2018-01-01 10:00:20 50
1 X 2018-01-02 10:00:00 40
1 Z 2018-01-01 10:00:00 20
1 Z 2018-01-02 10:00:00 40
1 Z 2018-01-03 10:00:00 50
结果应该是这样的:
Index User Date Speed Date_diff Speed_diff
1 X 2018-01-01 10:00:00 23
1 X 2018-01-01 10:00:20 50 20s 27
1 X 2018-01-01 10:02:00 40 1m40s -10
1 Z 2018-01-01 10:00:00 20 -2m -20
1 Z 2018-01-02 10:00:00 40 1d 20
1 Z 2018-01-03 10:00:00 50 1d 10
所以基本上我需要一个接一个地减去行并创建一个带有结果的新列。我正在开始使用 sql 进行冒险,但我不确定如何才能做到这一点?有什么想法吗?
我尝试使用此 https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_lag 执行此操作,但我认为我的语法错误
SELECT objid,LAG(Date) OVER AS 'lag',LEAD(Speed) OVER AS 'Lead',date- LAG(date) OVER AS 'lag diff',speed- LEAD(speed) OVER AS 'Lead diff',FROM tabel;
解决方法
尝试类似:
SELECT Index,User,'Date',Speed,'Date' - LAG('Date') OVER w AS Date_diff,Speed - LAG(Speed) OVER w AS Speed_diff
FROM table
WINDOW w AS (ORDER BY User,'Date');
,
只对字符串和日期值使用单引号——不要对列名使用单引号。
您的代码还需要一个窗口子句,并调整日期/时间算法。如果您可以将日期/时间差表示为 time
,则:
SELECT t.*,secs_to_time(to_seconds(t.date) - LAG(to_seconds(t.date)) OVER (PARTITION BY user ORDER BY DATE)) AS date_diff
(t.speed - LAG(speed) OVER (PARTITION BY user ORDER BY DATE)) as speed_diff
FROM tabel t;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。