テーブルがあり、 *item_id*ごとに最後の2回の実行で値id, item_id, value (int), run (datetime)
を選択する必要があります。
1133 次
2 に答える
3
SELECT item_id, ABS(value1 - value2) AS diff
FROM ( SELECT h.item_id, h.value AS value1, h2.value AS value2
FROM ( SELECT id, item_id, value
FROM table_name
GROUP BY item_id
ORDER BY run DESC) AS h
INNER JOIN ( SELECT id, item_id, value
FROM table_name
ORDER BY run DESC) AS h2
ON h.item_id = h2.item_id AND h.id != h2.id
GROUP BY item_id) AS h3
私はこれがあなたのためのトリックをするべきだと信じています。table_name
正しい名前に置き換えるだけです。
説明:
基本的に、私はテーブルをそれ自体とrun DESC
順番に結合し、item_idだけでなくidにも基づいてそれらを結合します。次に、それらを再度GROUP BYして、潜在的な3番目などのケースを削除します。最後に、ABS(value1-value2)を使用してそれらの差を計算します。
于 2012-04-25T12:01:26.430 に答える
1
SELECT t2.id, t2.item_id, (t2.value- t1.value) valueDiff, t2.run
FROM ( table_name AS t1
INNER JOIN
table_name AS t2
ON t1.run = (SELECT MAX(run) FROM table_name where run < t2.run)
and t1.item_id = t2.item_id)
これは、レコードと前回の実行のレコードとの差分が必要であることを前提としています。
于 2012-04-25T12:24:05.770 に答える