私は通常、マーケティングの視覚化ツールで使用される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の多くの例を参照しましたが、めったに結合されず、カウントの現在までの合計を決して達成していません。
同様のことをしようとしている人のために:これは結局うまくいったものです:
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;
たぶんこれが役立つでしょう:毎日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 を参照)