1

私のテーブルは次のようになります。

Date    DataPoint      Type    Value
2000         HVAC    Phase1      220
2000         HVAC    Phase2      221
2000       SERVER    Phase1      222
2000       SERVER    Phase2      223
2001         HVAC    Phase1      220
2001         HVAC    Phase2      221
2001       SERVER    Phase1      222
2001       SERVER    Phase2      223
2002         HVAC    Phase1      220
2002         HVAC    Phase2      221
2002       SERVER    Phase1      222
2002       SERVER    Phase2      223
...
...
2013         HVAC    Phase1      220
2013         HVAC    Phase2      221
2013       SERVER    Phase1      222
2013       SERVER    Phase2      223

最後の日付、データ ポイント、Type 値の合計を取得したい。

期待される結果

Date    DataPoint        Value
2013         HVAC          441
2013       SERVER          445

これどうやってするの?ヒント、出発点、コード例?

ありがとう...

4

3 に答える 3

5

単純化するために使用TOP... WITH TIES

SELECT TOP 1 WITH TIES Date, DataPoint, SUM(Value) AS Value
FROM YourTable
GROUP BY Date, DataPoint
ORDER BY Date DESC

SQLフィドル

于 2013-01-15T16:07:38.537 に答える
3

サブクエリを使用してを取得しmax(date)、それをメインテーブルに結合することもできます。

select t1.date,
  t1.datapoint,
  sum(t1.value) Total
from yourtable t1
inner join
(
  select max(date) date,
    datapoint
  from yourtable
  group by datapoint
) t2
  on t1.date = t2.date
  and t1.datapoint = t2.datapoint
group by t1.date, t1.datapoint;

SQL FiddlewithDemoを参照してください

sum() over()およびを使用しrow_number() over()て結果を取得することもできます。

select  Date,  DataPoint, total
from
(
  select Date,
    DataPoint,        
    sum(value) over(partition by DataPoint, Date) total,
    row_number() over(partition by DataPoint order by Date DESC) rn
  from yourtable
) src
where rn = 1

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

| DATE | DATAPOINT | TOTAL |
----------------------------
| 2013 |      HVAC |   441 |
| 2013 |    SERVER |   445 |
于 2013-01-15T16:08:04.430 に答える
1
WITH latestDate
AS
(
    SELECT  DataPoint, MAX(Date) max_DATE
    FROM tableName
    GROUP BY DataPoint
)
SELECT  a.Date, a.DataPoint, SUM(a.Value) totalValue
FROM    tableName a
        INNER JOIN latestDate b
            ON a.DataPoint = b.DataPoint AND
                a.Date = b.max_date
GROUP BY a.Date, a.DataPoint

SQLFiddleのBlueFeetに感謝します。

于 2013-01-15T16:08:49.127 に答える