Sqlite

在 SQLite 中執行每天計數的總數

  • May 4, 2019

我通常在行銷視覺化工具中使用的 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

引用自:https://dba.stackexchange.com/questions/183877