我有一个运行良好的 MySQL 查询,但现在我们正在迁移到 Postgres,但由于 MySQL 中使用的变量,它无法运行。查询如下:
SELECT COUNT
(
((
speed / 3.6 - prevspeed / 3.6
) / TIMESTAMPDIFF ( SECOND, prevdatenew, servertime )) / 9.80665
) AS hardAccels
FROM
(
SELECT ID
,
servertime,
@prevDateNew AS prevdatenew,
@prevDateNew := servertime,
speed,
@prevSpeed AS prevspeed,
@prevSpeed := speed
FROM
tc_positions
WHERE
deviceid = 32
AND ` ID ` BETWEEN 1318429
AND 1322230
) t1
WHERE
((
speed / 3.6 - prevspeed / 3.6
) / TIMESTAMPDIFF ( SECOND, prevdatenew, servertime )) / 9.80665 > 0.255;
这会返回错误,因为它无法识别 mysql 中使用的变量:
ERROR: syntax error at or near ":="
LINE 9: @prevDateNew:=servertime,
^
有什么解决办法吗?
最佳答案
您正在使用变量访问前几行的值。对于 PostgreSQL,您应该使用 ANSI SQL 标准函数 lag
。这个函数是一个窗口函数,所以你必须指定顺序。我没有你的数据,你的表,所以下面的查询只是为了灵感
SELECT speed - lag(speed,1) OVER (ORDER BY id) /
EXTRACT(epoch FROM (
servertime - lag(servertime, 1) OVER (ORDER BY id)))
FROM tc_positions
...
关于此主题的好文章是 http://www.postgresqltutorial.com/postgresql-window-function/
关于mysql - 将 MySQL 查询迁移到 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58666742/