星期一

MySQL中根據日期進行累積總計

算出累積總計是一個常見的需求, SQL 並沒有一個直接的方式達到這個需求。要以 SQL 算出累積總計第一是:先做個表格自我連結 (Self Join),然後將結果依序列出。在做累積總計時,我們是算出每一行之前 (包含那一行本身) 的和。
累積總計簡單來說就是根據行的遞進,每行顯示出之前行中的和。假設有下面一張表:


datasales
2020-03-22 12:43:1410
2020-03-23 12:43:1415
2020-03-24 12:43:1420
2020-03-25 12:43:1440
2020-03-26 12:43:1450
2020-03-27 12:43:1420

通常的需求是根據日期的遞進進行求和,因此我們可以鍵入以下的語句:





SELECT a1.data,a1.sales,sum(a2.sales) total
FROM assets a1,assets a2
where a1.data >= a2.data
GROUP BY a1.sales
ORDER BY a1.data

結果:



datasalessales
2020-03-22 12:43:141010
2020-03-23 12:43:141525
2020-03-24 12:43:142045
2020-03-25 12:43:144085
2020-03-26 12:43:1450135
2020-03-27 12:43:1420155

簡單說下原理:連結查詢可以生成一張由多張表的行數相乘的大表,而自己和自己也可以進行連結查詢,上表就生成了一些連結的表然後對其進行篩選求和,第一行中日期為最小的所以 小於等於 它的日期只有一個,就是它自己;第二行中小於等於它的有兩個,就是最小的日期與它,所以產生一個連結表2,表2上只有10和15,所以計出sum為25。
其餘為同理。

没有评论:

发表评论

 皆さんこんにちは、リュウタツと申します、中国から来ました、AIデザイン学科の一年生です。 私のテーマは「極東の地」です。 実に中国では日本といえば日中戦争を思い出すでしょう、日本に来る前は日本人ってまだ敵なのかな、仲良くできるかなっと思いました。ようやく、去年の4月にこの極東の...