2

私は非常に単純なテーブルを持っています:

Date, kWh

約4年間のデータがあります。

次のような結果セットを生成するにはどうすればよいですか。

Year, Result
2010, 123211
2011, 123213
2012, 123211
2013, xxxxxx

ここで、xxxx はその年の予測です。

予測は、これまでの 2013 年の日付の合計を組み合わせ、平均 kWh に 2013 年の残りの日数を掛けた値に加算されます。

4

3 に答える 3

1

これにより、うるう年の予測使用量が正しく計算されます。ご覧のとおり、うるう年の計算には他の計算よりも多くのロジックが必要です。年が進むにつれて予測が近づくため、1 年が経過すると、「予測」は実際の使用を示します。

SELECT DATEPART(YEAR, [Date]) year, SUM(kWh) * 
  (365 + ISDATE(CAST(DATEPART(YEAR, [DATE]) AS char(4)) + '0229')) / 
  COUNT(kWh) Projected
FROM readings
GROUP BY DATEPART(YEAR, [Date])

でテストする単純な SQLfiddle

複数年の平均カウントを作成するには、クエリを少し変更する必要があります。

WITH average AS (SELECT AVG(kWh) kWh FROM readings)
SELECT DATEPART(YEAR, a.[Date]) year, SUM(a.kWh) + AVG(b.kWh) *
  ((365 + ISDATE(CAST(DATEPART(YEAR, a.[DATE]) AS char(4)) + '0229')) -
  COUNT(a.kWh)) Projected
FROM readings a, average b
GROUP BY DATEPART(YEAR, a.[Date])

これは cte を使用して平均を計算し、後でクエリで使用します。

別の SQLfiddle

于 2013-03-13T06:57:02.243 に答える
0

2 つのクエリを作成する必要があります。1 つ目は YEAR による単純なグループで、2 つ目は昨年、残り日数、平均 kWh に関する 1 行の情報クエリです。次に、これらのテーブルを LEFT JOIN すると、必要なものが得られます。

SQLFiddle デモ

with t1 as
(
select 
       DATEPART(YEAR,[Date]) as Year,
       sum(kWh) SumKWH
from t
group by 
DATEPART(YEAR,[Date])
),
t2 as
(
select max(DATEPART(YEAR,[Date])) as MaxYear,
       AVG(kWH) as AverageKWH,
       DATEDIFF(DAY,max([Date]),
       CAST( CAST(max(DATEPART(YEAR,[Date])) as varchar(4))+'-12-31' as datetime)
                ) DaysLeft

from t
  )
select t1.YEAR, 
t1.SumKWH+ISNULL(AVERAGEKWH*DAYSLEFT,0)
from t1 
left join t2 on (t1.Year=t2.MaxYear)
order by t1.YEAR;
于 2013-03-13T08:34:38.460 に答える
0

毎年が 365 日であると仮定すると、確かにそうではありません...

select Datepart(YEAR,[Date]) as [Year],
           case when Datepart(YEAR,[Date]) = Datepart(YEAR, getdate()) 
        then  365*Avg(Kwh)
        else  SUM(Kwh) end as TotalKwh
    from table_1
    group by Datepart(YEAR,[Date])

于 2013-03-13T06:28:16.167 に答える