在MySQL中查找记录之间的更改
我有一张桌子,在那里我储存了许多储罐中储存的桶数。我每晚午夜在这里存储值,并在任何操作员发起的传输的开始和结束时存储值 我想返回的是自上一个特定储罐事件记录以来的桶数差异。我有正确的自连接ID以获取以前的记录编号,但是桶不正确 这是我目前拥有的在MySQL中查找记录之间的更改,mysql,sql,self-join,Mysql,Sql,Self Join,我有一张桌子,在那里我储存了许多储罐中储存的桶数。我每晚午夜在这里存储值,并在任何操作员发起的传输的开始和结束时存储值 我想返回的是自上一个特定储罐事件记录以来的桶数差异。我有正确的自连接ID以获取以前的记录编号,但是桶不正确 这是我目前拥有的 SELECT inventory.id, MAX(inventory2.id) AS id2, inventory.tankname, inventory.barrels, inventory.eventstamp
SELECT
inventory.id,
MAX(inventory2.id) AS id2,
inventory.tankname,
inventory.barrels,
inventory.eventstamp,
inventory2.barrels
FROM
inventory
LEFT JOIN
inventory inventory2 ON inventory2.tankname = inventory.tankname AND inventory2.eventstamp < inventory.eventstamp
GROUP BY
inventory.id,
inventory.tankname,
inventory.barrels,
inventory.eventstamp
ORDER BY
inventory.tankname,
inventory.eventstamp
这将返回以下结果
只需使用相关子查询:
SELECT i.*,
(SELECT i2.id
FROM inventory i2
WHERE i2.tankname = i.tankname AND
i2.eventstamp < i.eventstamp
ORDER BY i2.eventstamp DESC
LIMIT 1
) as prev_id,
(SELECT i2.barrels
FROM inventory i2
WHERE i2.tankname = i.tankname AND
i2.eventstamp < i.eventstamp
ORDER BY i2.eventstamp DESC
LIMIT 1
) as prev_barrels
FROM inventory i
ORDER BY i.tankname, i.eventstamp;
查询不起作用,因为SELECT中的列不在GROUP BY中且未聚合。这在任何数据库中都是不允许的;不幸的是,MySQL确实允许这样做。我没有意识到您可以在子查询中引用父列!