我有一个数据库表 fuel ,它有一个fID字段(主要,自动增量),vID(用于车辆ID),数量(以升为单位的燃料量),价格(用于每升燃料),仪表(填充日期当前车辆里程表),日期(车辆装满日期),供应商ID(燃料供应商或车辆装满的地方),备注(关于车辆或燃料的任何附加说明)和类型(燃料等级)。
我想通过将体积(购买的升数)乘以价格(每升成本)然后加上特定车辆的所有燃料条目的总数来计算每次填充的燃料成本,然后最后添加表格中所有燃料条目的成本(fID是唯一的,但vID会重复出现(因为车辆会不时被填满)。
这就是我现在正在运行的,但它只返回每次填充的成本(不会累加其他填充)。
Select
date_format(f1.date, '%y-%m-%y %H:%i:%s) as date,
f1.meter as mileage,
case when f2.meter is null then 0
else f1.meter - f2.meter
end as distance
f1.fID,
f1.volume,
f1.volume * f1.price as cost
from
fuel f1
left outer join
fuel f2
On
f2.date = (
select
max(date)
from
fuel
where
fuel.vID = f1.vID
and
fuel.date < f1.date
)
where
f1.ID = ?
Order by f1.date
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您只需对查询进行细微更改,删除WHERE
子句并添加GROUP BY
:
SELECT f1.vid,
DATE_FORMAT(f1.date, '%y-%m-%d %H:%i:%s') AS date,
f1.meter AS mileage,
CASE WHEN f2.meter IS NULL THEN 0
ELSE f1.meter - f2.meter
END AS distance,
f1.volume,
SUM(f1.volume * f1.price) AS cost
FROM fuel f1
LEFT JOIN fuel f2
ON f2.date = (SELECT MAX(date)
FROM fuel
WHERE fuel.vID = f1.vID AND fuel.date < f1.date)
GROUP BY f1.vid, f1.date WITH ROLLUP
对于来自您a previous question的样本数据,这会得到以下结果。您可以在null
列中按date
检测每辆车的摘要行,并在null
列中按vid
检测总体摘要行。
vid date mileage distance volume cost
26 18-05-27 05:57:00 4500 0 25 18750
26 18-05-27 05:58:00 6000 1500 20 15000
26 (null) 6000 1500 20 33750
27 18-05-27 04:58:00 1200 0 15 18000
27 18-05-27 05:50:00 2000 800 5 5000
27 (null) 2000 800 5 23000
28 18-05-27 05:53:00 5000 0 15 12000
28 (null) 5000 0 15 12000
(null) (null) 5000 0 15 68750
如果您对查看每辆车的各个条目不感兴趣,可以从GROUP BY
中删除日期(以及选择中的日期特定变量)。此查询还将总和距离和音量:
SELECT f1.vid,
SUM(CASE WHEN f2.meter IS NULL THEN 0
ELSE f1.meter - f2.meter
END) AS distance,
SUM(f1.volume) as volume,
SUM(f1.volume * f1.price) AS cost
FROM fuel f1
LEFT JOIN fuel f2
ON f2.date = (SELECT MAX(date)
FROM fuel
WHERE fuel.vID = f1.vID AND fuel.date < f1.date)
GROUP BY f1.vid WITH ROLLUP
输出(摘要行null
为vid
}:
vid distance volume cost
26 1500 45 33750
27 800 20 23000
28 0 15 12000
(null) 2300 80 68750