MySQL SELECT ステートメント内の行間の差異の計算
このシナリオでは、キロメートル、日付、と車の情報が表示されますが、必ずしも時系列順であるとは限りません。目標は、各車の最後の日付からのキロメートル数を表示する追加の列を含むビューを作成することです。
これを達成するには、データが次のとおりであるため、ID 列での単純な JOIN に依存することはできません。時系列順に並べていない。代わりに、LEFT JOIN とサブクエリを使用して、各行の現在の日付より前の最大日付を決定する必要があります。
LEFT JOIN とサブクエリの使用
次のクエリは、LEFT JOIN を使用して、現在のテーブル行 (mt1) を、mt1 の日付より前の最大の日付を持つ行 (mt2) に接続します。
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
このクエリは、キロメートル間の差を計算します。現在の行 (mt1) と、現在の日付より前の最大の日付を持つ行のキロメートル (mt2)。 mt2 が NULL の場合、前の行がないことを意味するため、差は 0 です。
MySQL Hackery を使用した代替方法
代わりに、 MySQL ではネイティブにサポートされていない lag() 関数をエミュレートするための MySQL ハック:
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) を使用して、前のキロメートル値を追跡します。現在のキロメートル値と @kilo の差により、最後の日付からのキロメートル数がわかります。 @kilo 変数は、各行が処理された後に現在のキロメートル値で更新されます。
以上がMySQL テーブルの行間のキロメートルの差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。