私は車が彼のタンクがいっぱいになるたびに私を示す次の表があります。それは、日付、車のID、それはその時点で持っていた走行距離と埋めリットルを返します。2列で最大と最小のグループ
| Date | Vehicle_ID | Mileage | Liters |
| 2016-10-20 | 234 | 123456 | 100 |
| 2016-10-20 | 345 | 458456 | 215 |
| 2016-10-20 | 323 | 756456 | 265 |
| 2016-10-25 | 234 | 123800 | 32 |
| 2016-10-26 | 345 | 459000 | 15 |
| 2016-10-26 | 323 | 756796 | 46 |
アイデアは月ごとに平均comsumptionを計算することである(私は一日でそれを行うことはできませんので、必ずしもすべての車は毎日タンクを満たします)。
これを得るには、月ごとにmax(mileage) - min(mileage)/ sum(liters)を取得しようとしました。しかし、これは1台の特定の車と1ヶ月にのみ有効です。
私が1台の特定の車と数ヶ月を試してみると、最大値と最小値は正しく返されません。すべての車を追加すると、さらに悪いことに、すべての車が同じであるかのように最大値と最小値を仮定します。
select convert(char(7), Date, 127) as year_month,
sum("Liters tanked")/(max("Mileage")-min("Mileage"))*100 as Litres_per_100KM
from Tanking
where convert(varchar(10),"Date",23) >= DATEADD(mm, -5, GETDATE())
group by convert(char(7), Date, 127)
これは、すべての車の最大値と最小値を想定しているため動作しません。
「ワークフロー」は、次のようになります。 - 毎月、各車の最大および最小のマイルを取得します。その月に乗った走行距離を得るためにmax-minを計算します。各自動車の走行距離を合計して、すべての自動車が走行する総走行距離を取得します。リットルをタンクに入れてください。総リットルを総走行距離で割る。
にはどうすればいい結果を得ることができます。
| YearMonth | Average |
| 2016-06 | 30 |
| 2016-07 | 32 |
| 2016-08 | 46 |
| 2016-09 | 34 |
「私がいないすべての車の塗りつぶしので、日によってそれを行うことはできません毎日タンク "。毎月の消費量を約30で割ったものではありませんか? – Strawberry
こんにちはストロベリー。いいえ、私が「日ごとの平均」を望むなら、それはそのように機能します。しかし、私が毎日何を意味するかは、 "1日目 - 平均X"、 "2日目 - 平均Y"などでした。 –
出力には、 '2016-09'、' 2016-08'、 '2016-07' 「2016-06」。しかし、サンプルデータにはこれらの月の記録は含まれていません。更新することができますので、私たちは何か対処する必要があります。 –