簡體   English   中英

將 MySQL 查詢遷移到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM