如何对一列中具有相同ID的最后两行求和,然后再求和

时间:2015-03-12 19:29:56

标签: mysql

我试图在我的数据库中平均消耗燃料。但我不知道该怎么做。 这是一个小解释: 我有2张桌子:

Tabe CONSUM:
ID   CARID   LI        KM          DATETIME
------------------------------------------------
6     9     70.17   174857   2015-02-10 10:58:51
5     5     51.00   154785   2015-02-09 19:11:19
4     8     99.44   485627   2015-02-09 18:45:48
3     9     47.78   174114   2015-02-09 17:21:32
2     8     24.74   484175   2015-02-07 12:28:37
1     5     89.65   154201   2015-02-02 22:01:14

Table CARS
CARID  avglasttwo 
-----------------
5        8.73
8        6.84
9        10.58  
...

*数据为例。

我需要在表COSUM中使用相同的CAREID来表示最后2 KM行的总和(例如CARID 9): km 174857 - km 174114 = 743然后使用最后插入的LI 70.17(对于CARID 9),在该总和70.17 /(743/100)之后并将其插入表CARS avglasttwo,卡ID为9.并为所有CARID执行此操作。 此外,每次新输入后,都需要刷新avglasttwo。

我目前手动执行此操作并花费了大量时间。 我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

试试这个。应返回两条最新记录的carID,max LI和两条记录的KM差异。

SELECT c.CARID, c.lastLI AS maxLI, MAX(c.KM)-MIN(c.KM) AS diff
FROM (
    SELECT CONSUM.*, lastTwo.lastLI
    FROM CONSUM
    JOIN 
        (SELECT CARID, 
        SUBSTRING_INDEX(GROUP_CONCAT(LI ORDER BY ID DESC), ',', 1) AS lastLI,
        SUBSTRING_INDEX(GROUP_CONCAT(ID ORDER BY ID DESC), ',', 2) AS twoLatest 
        FROM CONSUM 
        GROUP BY CARID) lastTwo ON CONSUM.CARID=lastTwo.CARID 
            AND FIND_IN_SET(CONSUM.ID, lastTwo.twoLatest)>0) c
GROUP BY c.CARID

现在您可以使用maxLI和diff数据插入行

三个子查询....不是最好的解决方案。 但如果你坚持继续......