我有一个数据库表fuel,它有一个fid字段(primary,autoincrement)、vid(表示车辆id)、volume(表示以升为单位的燃油量)、price(表示每升燃油的成本)、meter(表示车辆在加注日期的当前里程表)、date(表示车辆正在加注的日期),供应商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
任何帮助都将不胜感激。
1条答案
按热度按时间e4yzc0pl1#
您只需要对查询做一个小的更改,就可以删除
WHERE
子句并添加GROUP BY
:对于您上一个问题的示例数据,这将给出以下结果。您可以通过以下方式检测每辆车的摘要行:
null
在date
列,并按行显示总体摘要null
在vid
列。演示
如果您对查看每辆车的各个条目不感兴趣,可以从列表中删除日期
GROUP BY
(和选择中的日期特定变量)。此查询还将对距离和体积进行求和:输出(摘要行具有
null
为了vid
):演示