2016-10-11 6 views
0

私はまた、日付のグループ化しながら、日付だけのテーブルに1回発生するように、日付を超えるメトリックに累積成長を表示したいsqlを使用し、日付別にメトリックの累積増加を日付別に表示するにはどうすればいいですか?

I次のデータセットがあります。

data = [{'date':'2016-01-01','value':'1'},{'date':'2016-01-01','value':'3'},{'date':'2016-01-02','value':'3'},{'date':'2016-01-02','value':'2'}]

次のクエリは、以下の表を生産している:

以下
select 
date, 
sum(value) over (order by date rows unbounded preceding) as value 
from data 
group by 
date, 
value 

は私のテーブル

date  value  
2016-01-01 1 
2016-01-01 4 
2016-01-02 7  
2016-01-02 9 
です210

しかし、私は次の表を作成したい:

date  value  
2016-01-01 4 
2016-01-02 9 

私は次のクエリを試してみて、値でグループを使用しないときは、私は以下のエラーを取得:

select 
date, 
sum(value) over (order by date rows unbounded preceding) as value 
from data 
group by 
date 

ERROR:

column "value" must appear in the GROUP BY clause or be used in an aggregate function

+0

mysqlまたはsql-server? – techspider

+0

これをMySQL、SQL Server、Redshiftとタグ付けしたのはなぜですか?あなたはどちらを使っていますか? –

答えて

0

合計を計算する前に日付による合計値を計算することはありますか?

select date, 
    sum(value) over (order by date) as value 
from (
    select date, sum(value) as value 
    from data 
    group by date 
) t 
0

私が考えることができる最も簡単なことは、先行する行を削除し、別個のものを含めることです。

SELECT DISTINCT 
    [date] 
    ,SUM([value]) OVER (ORDER BY [date]) AS [value] 
FROM @tbl 

つまり、row_numberでサブクエリすることもできます。

SELECT 
    [date] 
    ,[value] 
FROM (
    SELECT 
     [date] 
     ,SUM([value]) OVER (ORDER BY [date]) AS [value] 
     ,ROW_NUMBER() OVER (PARTITION BY [date] ORDER BY [value] DESC) AS [row] 
    FROM @tbl 
    ) tbl 
WHERE [row] = 1 
関連する問題