如何計算MySQL中連續行的值之間的差異?

Mary-Kate Olsen
發布: 2024-11-07 04:18:02
原創
450 人瀏覽過

How to Calculate the Difference Between Values in Consecutive Rows in MySQL?

檢索MySQL SELECT 語句中的列差異

在MySQL 中,取得SELECT 語句中兩行值之間的差異涉及使用適當的方法選擇和連接技術。讓我們檢查這個問題並探索可用的解決方案。

提供的表格包含按 ID、公里、日期、汽車 ID、汽車駕駛員等組織的行。要正確對錶進行排序,需要使用帶有 ORDER BY 的 SELECT 語句使用子句,產生排序表。

接下來,目標是建立一個包含附加列「number_km_since_last_date」的視圖,提供自上次記錄日期以來的公里數。一種方法採用 INNER JOIN,但由於未排序的行而面臨挑戰。

使用 LEFT JOIN 和子查詢:

更有效的方法涉及使用 LEFT JOIN 組合與子查詢。子查詢從同一個表中選擇小於目前行日期的最大日期。透過將目前行與最大前一行連接起來,可以使用表達式「mt1.Kilometers - IFNULL(mt2.Kilometers, 0)」計算以公里為單位的差值。產生的SQL 查詢是:

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
登入後複製

使用MySQL Hack 模擬LAG() 函數:

另一種技術利用模擬lag() 函數,該函數不是本機的MySQL 中支援。使用者定義的變數 @kilo 被初始化為零。在查詢中處理每一行時,將從 @kilo 的當前值中減去其公里數,然後將 @kilo 更新為當前公里數。這有效地提供了自上一行以來的公里數差異。結果查詢是:

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
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!