からの長さ、日付を選択 私はそれを行う方法クエリを考えることができませんでし現在マイナス前の長さ
、以下の表のように変化のサンプルを参照してください。 LAG
ウィンドウ機能:
SELECT `date`, `length`,
`length` - @prev AS changes,
@prev := `length`
FROM length_data, (SELECT @prev := 0) AS a
ORDER BY `date`;
SqlFiddleDemo
私はdate
がPRIMARY KEY/UNIQUE
であると仮定しましたが、それ以外は安定しません。
EDIT:
あなたはサブクエリを使用することができ、追加の列を削除するには。
SELECT `date`, `length`, `changes`
FROM (SELECT `date`, `length`,
`length` - @prev AS changes,
@prev := `length`
FROM length_data,(SELECT @prev := 0) as a
ORDER BY `date`) AS sub
ORDER BY `date`;
SqlFiddleDemo2
出力:
╔══════════════════════════════╦═════════╦═════════╗
║ date ║ length ║ changes ║
╠══════════════════════════════╬═════════╬═════════╣
║ August, 29 2000 10:30:00 ║ 147.98 ║ 147.98 ║
║ August, 30 2000 00:00:00 ║ 147.98 ║ 0 ║
║ September, 02 2000 10:30:00 ║ 156.51 ║ 8.53 ║
║ September, 04 2000 00:00:00 ║ 156.51 ║ 0 ║
║ September, 04 2000 04:30:00 ║ 156.51 ║ 0 ║
║ September, 04 2000 06:30:00 ║ 156.51 ║ 0 ║
║ September, 05 2000 21:00:00 ║ 156.51 ║ 0 ║
║ September, 06 2000 03:00:00 ║ 156.51 ║ 0 ║
║ September, 07 2000 09:30:00 ║ 204.06 ║ 47.55 ║
║ September, 07 2000 10:30:00 ║ 204.06 ║ 0 ║
║ September, 08 2000 00:00:00 ║ 339.09 ║ 135.03 ║
║ September, 08 2000 12:30:00 ║ 395.78 ║ 56.69 ║
║ September, 09 2000 09:30:00 ║ 477.77 ║ 81.99 ║
║ September, 10 2000 02:30:00 ║ 737.77 ║ 260 ║
╚══════════════════════════════╩═════════╩═════════╝
EDIT 2:1つの列のみを使用して計算するJean Doux's ideaを使用
:
SELECT `date`, length,
CAST((-IF(@prev IS NULL,0,@prev) + (@prev := length)) AS DECIMAL(10,4)) AS changes
FROM length_data,(SELECT @prev := NULL) AS a
ORDER BY `date`;
SqlFiddleDemo2
または最も簡単な方法は、アプリケーション層で追加の列をスキップすることです。
非常に簡単です。 RDBMS 'LAG/LEAD'または前の行への自己結合に依存します。 – lad2025
RDBMS(SQL Server、MySQL、Oracle ...)は何ですか? – KenD
@KenD RDBMSはMySQL –