1

初めての投稿。例として、12 個のエントリを持つテーブルがあるとします。

+--------+------------+
| | 名前 | 日付 |
+--------+------------+
| | P1 | 2011-12-01 |
| | P2 | 2012-01-01 |
| | P3 | 2012-02-01 |
| | P4 | 2012-02-01 |
| | P5 | 2012-02-01 |
| | P6 | 2012-05-01 |
| | P7 | 2012-04-01 |
| | P8 | 2012-05-01 |
| | P9 | 2012-05-01 |
| | P10 | 2012-06-01 |
| | P11 | 2012-06-01 |
| | P12 | 2012-03-01 |
+--------+------------+

テーブル内の情報を日付ごとにグループ化し、すべての ID (表示されていません) のカウントを保持し、現在の合計作成しました。私はそのように実装しました。

(SELECT 日付、カウントとして c、run_total として (@s := @s + c)
から
(SELECT D1.date, Count(D1.person_id) as c, @s := 0
FROM テーブル D1
GROUP BY 月(D1.date)
ORDER BY D1.date) as T1);

出力;

+------------+-------+-----------+
| | 日付 | カウント | run_total |
+------------+-------+-----------+
| | 2011-12-20 | 1 | 1 |
| | 2012-01-31 | 1 | 2 |
| | 2012-02-20 | 3 | 5 |
| | 2012-03-05 | 1 | 6 |
| | 2012-04-20 | 1 | 7 |
| | 2012-05-20 | 3 | 10 |
| | 2012-06-01 | 2 | 12 |
+------------+-------+-----------+

これまでのところ良い。これは私がそれを緩めるところです。最新の 4 つのエントリを抽出して、このようなものを取得するにはどうすればよいですか? 日付は昇順のままで、さらに重要なことに、run_total は同じままです。

-----私が達成しようとしていること-----

----------------------------------
| | 2012-03-05 | 1 | 6 |
| | 2012-04-20 | 1 | 7 |
| | 2012-05-20 | 3 | 10 |
| | 2012-06-01 | 2 | 12 |
+------------+-------+-----------+

--------------------------------------

これを解決しようとして、私はこれを作成しました。

(SELECT 日付、カウントとして c、run_total として (@s := @s + c)
から
(SELECT D1.date, Count(D1.person_id) as c, @s := 0
FROM テーブル D1
GROUP BY 月(D1.date)
ORDER BY D1.date desc limit 4) as T1)
ORDER BY 日付;

しかし、望ましい結果は得られませんでした。

+------------+-------+-----------+
| | 日付 | カウント | run_total |
+------------+-------+-----------+
| | 2012-03-05 | 1 | 1 |
| | 2012-04-20 | 1 | 2 |
| | 2012-05-20 | 3 | 5 |
| | 2012-06-01 | 2 | 7 |
+------------+-------+-----------+

日付は整っていますが、run_totals はすべてめちゃくちゃです。1 は、前に示したように 6、2 -> 7、5 -> 10、および 7 -> 12 であると想定されます。

繰り返しますが、私が達成しようとしているのは次のとおりです。

----------------------------------
| | 2012-03-05 | 1 | 6 |
| | 2012-04-20 | 1 | 7 |
| | 2012-05-20 | 3 | 10 |
| | 2012-06-01 | 2 | 12 |
+------------+-------+-----------+
4

2 に答える 2

1
SELECT * FROM
(SELECT *
FROM (SELECT date, count, (@s := @s + c) as run_total 
FROM
(SELECT D1.date, Count(D1.person_id) as c, @s := 0
FROM table D1
GROUP BY month(D1.date)
ORDER BY D1.date) as T1) tmp
ORDER BY `date` DESC
LIMIT 4) tmp2
ORDER BY `date` ASC

クエリの最新の 4 つのレコードを取得し、日付順に並べ替えます。
合計は変更されません。

于 2012-06-27T19:06:43.173 に答える
0
(SELECT date, c as count, (@s := @s + c) as run_total 
FROM
(SELECT D1.date, Count(D1.person_id) as c, @s := 0
FROM table D1
GROUP BY month(D1.date)
ORDER BY D1.date ASC) as T1) LIMIT 4;
于 2012-06-27T19:07:17.387 に答える