首頁 > 資料庫 > mysql教程 > 如何計算 MySQL SELECT 語句的行差異?

如何計算 MySQL SELECT 語句的行差異?

Mary-Kate Olsen
發布: 2024-11-10 10:05:02
原創
420 人瀏覽過

How do you calculate the difference in rows of a MySQL SELECT statement?

計算MySQL SELECT 語句的行之間的差異

在MySQL 中,計算SELECT 語句的以下行之間的差異可以透過以下行之間的差異可以透過以下行方式完成各種方法。一種常見的方法是利用自聯接,使您能夠比較同一表中的行。考慮以下情境:

問題陳述:

您有一個包含車輛資料的表,包括公里數、日期、汽車 ID 和駕駛員。然而,由於資料輸入順序不同,資料可能未排序。您的目標是建立一個視圖,顯示自上次輸入以來每個汽車駕駛員組合的行駛公里數,從而產生以下格式:

ID | Kilometers | date       | car_id | car_driver | number_km_since_last_date   
 1 | 100        | 2012-05-04 | 1 | 1 | 0  
 2 | 200        | 2012-05-08 | 1 | 1 | 100  
 4 | 600        | 2012-05-16 | 1 | 1 | 400  
 3 | 1000       | 2012-05-25 | 1 | 1 | 400
登入後複製

解決方案1:使用子查詢連接

您可以在INNER JOIN 中使用子查詢來檢索每個行的前一行公里數記錄:

SELECT
    mt1.ID,
    mt1.Kilometers,
    mt1.date,
    mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date   
FROM
    myTable mt1
    LEFT JOIN myTable mt2
        ON mt2.Date = (
            SELECT MAX(Date)
            FROM myTable mt3
            WHERE mt3.Date < mt1.Date
        )
ORDER BY mt1.date
登入後複製

在此查詢中,子查詢選擇當前行日期先前的最大日期,然後將此最大日期與LEFT JOIN 中的記錄相符。

解決方案2:模擬Lag函數

MySQL不提供內建的lag()函數,但您可以透過使用者定義的變數來模仿其行為:

SET @kilo=0;

SELECT
    mt1.ID,
    mt1.Kilometers - @kilo AS number_km_since_last_date,
    @kilo := mt1.Kilometers Kilometers,
    mt1.date
FROM myTable mt1
ORDER BY mt1.date
登入後複製

在此查詢中,使用者定義的變數@kilo 儲存前一行的公里數。每次迭代,使用者定義的變數都會更新,有效追蹤公里數的變化。

以上是如何計算 MySQL SELECT 語句的行差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板