![](/img/trans.png)
[英]How to set in Rails a default timezone for query or set offset for datetime value when migrating record from MySql to Postgres
[英]MIgrating MySQL query to Postgres
我有一個 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 標准 function lag
。 這個 function 是 window function,所以你必須指定順序。 我沒有你的數據,你的表格,所以下面的查詢只是為了靈感
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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.