ホームページ  >  記事  >  データベース  >  MySQL SELECT ステートメントの行の差はどのように計算しますか?

MySQL SELECT ステートメントの行の差はどのように計算しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-10 10:05:02363ブラウズ

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

MySQL SELECT ステートメントの行間の差異の計算

MySQL では、SELECT ステートメントの行間の差異の計算は次のように実行できます。さまざまな方法。一般的なアプローチの 1 つは自己結合を利用して、同じテーブル内の行を比較できるようにすることです。次のシナリオを考えてみましょう:

問題ステートメント:

キロメートル、日付、車 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 内でサブクエリを使用して、それぞれの前の行のキロメートルを取得できます。 Record:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。