3

多くの行と「タイムスタンプ」と呼ばれる列を持つ「結果」と呼ばれるテーブルがあります。

各月の行数をグループ化したい。しかし、それらのそれぞれについて、前の月の行も考慮したいと思います。

だから私が持っているなら

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');
4

3 に答える 3

3

私はこれを機能させました:

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 |
+------------+-------+-------+
于 2013-06-05T17:38:12.203 に答える
1

次の解決策はうまくいくはずです...

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

幸運を

トーキー

于 2013-06-05T17:31:58.570 に答える
0

私があなたを正しく理解していれば、これはうまくいくはずです。

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

于 2013-06-05T17:45:27.750 に答える