web-dev-qa-db-ja.com

SQLiteでの1日あたりのカウントの累計

私は通常、マーケティングの視覚化ツールで使用されるredshiftデータベースに非常に単純なクエリをいくつか記述します。そして私は繰り返します-非常に簡単です-私はこれが初心者です。

現在、新しいデータソース(SQLite)に直面していて、行き詰まっています。

私はテーブルがあります:

  • order_id
  • order_date

1日に複数の注文がある場合。そして、注文IDの日次カウントの現在までの合計を取得しようとしています。

たとえば、テーブルには次のものが含まれます。

order_id      order_date  
2541          2017-06-05  
26777         2017-06-05  
123           2017-06-06  
8795          2017-06-07  

そして、私はこの結果を得ようとしています:

Day          RunningTotal  
2017-06-05 : 2  
2017-06-06 : 3  (the 2 of the previous day + 1 this day)  
2017-06-07 : 4  

POSTGRESQLでは、

SELECT  
order_date,  
SUM (COUNT(order_id)) OVER (ORDER BY order_date rows between unbounded preceding and current row) as RunningTotal
FROM table  
ORDER BY  
order_date  
GROUP BY  
order_date  

SQLiteでこれを行うにはどうすればよいですか?

私はググってみました-そしてSUMまたはCOUNTの多くの例を参照しましたが、めったに結合されず、カウントの現在までの合計を決して達成していません。

2
user132928

同様のことをしようとしている人のために:これは結局うまくいったものです:

select
a.ORDER_DATE,
sum(b.ID_COUNT) RunningTotal
from
(select
ORDER_DATE, Count(DISTINCT(SOFTWARE_ID)) ID_COUNT
from orders
group by ORDER_DATE
order by ORDER_DATE) a,
(select
ORDER_DATE, Count(DISTINCT(SOFTWARE_ID)) ID_COUNT
from orders
group by ORDER_DATE
order by ORDER_DATE) b
where a.ORDER_DATE >= b.ORDER_DATE
group by a.ORDER_DATE
order by a.ORDER_DATE;
2
user132928

たぶんこれが役立つでしょう:毎日COUNT()を配信するビューを作成し、このビューを(クエリで)使用して(SUM()を使用して)現在の合計を計算します。

create view order_view
as
select
  order_date
, count(order_id) order_count
from orders 
group by order_date 
order by order_date ; 

これにより(テストデータを使用して)以下が提供されます。

select * from order_view
-- output
order_date  order_count
2017-06-05  2
2017-06-06  1
2017-06-07  1

次に、次のようなものを使用します...

select 
  a.order_date
, sum(b.order_count) RunningTotal
from 
  order_view a
, order_view b
where a.order_date >= b.order_date
group by a.order_date
order by a.order_date;

-- output
order_date   RunningTotal
2017-06-05   2
2017-06-06   3
2017-06-07   4

参照: dbfiddle 。 「SQLiteには、日付や時刻を格納するためのストレージクラスはありません。」 ( https://sqlite.org/datatype3.html を参照)

1
stefan