我有一个表,我需要在每个 *item_id* 的最后两次运行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 回答