Sqlite
在 SQLite 中執行每天計數的總數
我通常在行銷視覺化工具中使用的 redshift 數據庫上編寫幾個非常簡單的查詢。我再說一遍 - 非常簡單 - 我是這方面的新手。
我現在面臨一個新的數據源(SQLite)並且我被卡住了。
我有一張桌子:
order_id
order_date
每天有幾個訂單。我正在嘗試獲取訂單 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 中做到這一點?
我已經用Google搜尋了 - 看到了很多 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)