我有一张桌子,我在那里储存了许多储罐内储存的桶数。我每天晚上都在这里存储值,并且在任何操作员启动的转移的开始和结束时。
我想要返回的是自该特定油箱的上一个事件记录以来的桶数差异。我有正确的自我加入ID来获取前一个记录号,但桶是不正确的。
这是我现在拥有的。
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
返回以下内容
答案 0 :(得分:1)
只需使用相关子查询:
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确实允许它。