1

5列のテーブルがあります:

PK_Column, FK_MeterID, Date, Index, Value

そして、私はうまく機能しているこのクエリを持っています:

SELECT FK_MeterID,
       sum(Value) as 'Total',
       @p_Month,
       @p_Year
FROM ValuesHistory
WHERE month(Date) = @p_Month
      and year(Date)  = @p_Year
GROUP BY  FK_MeterID

ただし、1か月の値を合計する代わりに、やりたい

月の最後のインデックスと月の最初のインデックスの間のインデックスの差

月。(同じ結果が返ってくるはずです)

違いを使用してこのクエリを作成するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

集計関数を探しているかのように聞こえます。

WITH CTE AS
(
    SELECT RN = ROW_NUMBER() OVER (
                  PARTITION BY FK_MeterID
                  ORDER BY Date, PK_Column),
           TOTAL  = SUM(Value) OVER (PARTITION BY FK_MeterID),
           MINVAL = MIN(Value)  OVER (PARTITION BY FK_MeterID),
           MAXVAL = MAX(Value)  OVER (PARTITION BY FK_MeterID),
           PK_Column, FK_MeterID, [Date], [Index], Value
    FROM ValuesHistory
    WHERE month(Date) = @p_Month
      AND year(Date)  = @p_Year
)
SELECT DIFFERENCE = MAXVAL - MINVAL, CTE.*
FROM CTE
于 2013-05-06T07:56:39.000 に答える