Mysql

隨著時間的推移總交易的滾動計數

  • March 5, 2016

我需要在每週的時間間隔內獲得一組總交易量。本質上,我需要一個總交易量列。當我按 WEEK(Date) 分組時,我得到了該週的交易量,但還需要獲得該週之前任何時間的交易。

所以假設我有一張這樣的桌子:

TransactionID  | Date
---------------|-----------
            1 | 8-04-2014
            2 | 8-05-2014
            3 | 8-18-2014
            4 | 8-18-2014
            5 | 8-20-2014

我想要一個 select 語句,它可以為我提供類似的東西

TotalTransactionsToDate | Week | Year
------------------------|------|------
                     2 |    1 | 2014
                     5 |    3 | 2014

我正在使用 MySql 5.5.38

您想要的稱為累積和,您可以執行以下操作:

create table transactions (transactionid int, d date);
insert into transactions (transactionid, d) 
   values (1, '2014-08-04'),(2,'2014-08-05'), (3, '2014-08-18')
        , (4, '2014-08-18'), (5,'2014-08-20');

select x.y, x.w,  count(1) 
from ( 
  select distinct year(d) as y, week(d) as w 
  from transactions
) as x 
join transactions y 
   on year(y.d) < x.y
   or ( year(y.d) = x.y
    and week(y.d) <= x.w ) 
group by x.y, x.w;  

+------+------+----------+
| y    | w    | count(1) |
+------+------+----------+
| 2014 |   31 |        2 |
| 2014 |   33 |        5 |
+------+------+----------+

我沒有看到您對 2014 年 2 2 的額外請求。您可以通過替換:

select distinct year(d) as y, week(d) as w 
from transactions 

…用一個表達式創建整個域數週。創建一個日曆表通常是一個好主意,您可以使用它來加入以獲取缺失值等的報告。

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