在MySQL中找到记录之间的变化

时间:2017-06-05 23:38:32

标签: mysql sql self-join

我有一张桌子,我在那里储存了许多储罐内储存的桶数。我每天晚上都在这里存储值,并且在任何操作员启动的转移的开始和结束时。

我想要返回的是自该特定油箱的上一个事件记录以来的桶数差异。我有正确的自我加入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

返回以下内容

Machine Constraints | Simple Constraints

1 个答案:

答案 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确实允许它。