行を前の行JOIN
と比較するために、テーブルをそれ自体に作成し、前のid
(主キー)と比較しています。
CREATE TABLE `tablename` (
id INT(5) PRIMARY KEY AUTO_INCREMENT,
data INT
);
SELECT t1.id, t1.data, t1.data-(SELECT data FROM tablename WHERE id=t1.id-1) AS diff
FROM tablename t1 LEFT JOIN tablename t2 ON t1.id = t2.id
ORDER BY diff DESC LIMIT 1;
これをデータの特定のサブセットのみに制限するにはどうすればよいですか?たとえば、列user VARCHAR(32)
がテーブルに追加された場合、特定のユーザーのみを比較するようにクエリを制限するにはどうすればよいですか?SELECT
前提全体がシーケンシャルに依存するため、2つのクエリに単純なWHERE句を追加しても機能しませんid
。データを一時テーブルに移動できると思いますが、よりクリーンで効率的なソリューションがある場合は、それを使用します。
私の意図はWHERE user='someUser'
、diffがテーブル全体ではなく、特定のユーザーに対してのみdiffする句を追加することです。
これが動作するsqlfiddleです。このクエリを変更して、に対してのみ機能するWHERE name='a'
ようにし、結果が。になるようにしますid=9, data=305, diff=125
。