簡體   English   中英

按月對MySQL行進行分組,並將數據計算到每個月

[英]Group MySQL rows by month and count data until each month

我有一個名為“results”的表,其中包含許多行和一個名為“timestamp”的列。

我想分組每個月的行數。 但對於他們中的每一個,我也想考慮前幾個月的行。

所以,如果我有

Jun/13
Jun/13
Jun/13
Jul/13
Jul/13
Jul/13
Jul/13
Jul/13
Aug/13
Aug/13
Aug/13
Aug/13
Aug/13
Aug/13
Aug/13

結果將是

3  Jun/13
8  Jul/13
15 Aug/13

這就是我現在所擁有的,但它不考慮前幾個月。

SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), '%e %b %Y'), COUNT(1) FROM results
GROUP BY DATE_FORMAT(FROM_UNIXTIME(timestamp), '%e %b %Y');

我得到了這個工作:

SELECT month, count, @total:=@total+count AS total
FROM (SELECT @total:=0) t STRAIGHT_JOIN
  (SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), '%e %b %Y') AS month, COUNT(*) AS count
  FROM results GROUP BY EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(timestamp))) AS m;

+------------+-------+-------+
| month      | count | total |
+------------+-------+-------+
| 1 Jun 2013 |     3 |     3 |
| 1 Jul 2013 |     5 |     8 |
| 1 Aug 2013 |     7 |    15 |
+------------+-------+-------+

以下解決方案應該是......

SELECT COUNT(1),DATE_FORMAT(timestamp,'%b /%y')FROM results GROUP BY YEAR(timestamp),MONTH(timestamp);

祝好運

Talki

如果我理解正確,這應該有效;

SELECT COUNT(*) num, SUBSTR(ts, 1, 7) month
FROM results
JOIN (SELECT MAX(timestamp) ts FROM results
      GROUP BY YEAR(timestamp),Month(timestamp)) mm
  ON results.timestamp <= mm.ts
GROUP BY SUBSTR(ts, 1, 7);

一個要測試的SQLfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM