3

mysql で月ごとにグループ化する方法はありますが、カスタムの開始日があります。

ログインを月単位でカウントしたいが、ユーザーが登録したときに月が始まるという条件があるとします。

たとえば、ユーザーAが 1 月 30 日に登録し、ユーザーBが 1 月 15日に登録したとします。

ログインを次のようにグループ化する必要があります。

* User A: January 30th - February 28th, March 1st - March 30th, March 31 - April 30 and so on and so forth 
* User B: January 15th - February 14th, February 15th - March 14th and so on and so forth

次のようなものを使用する必要があると思いますDATE_ADD('2013-01-30', INTERVAL 1 MONTH);が、グループ化する方法が見つからないようです。

アップデート

@GarethD: タイプミスだったのは正しい

一般的に、月は翌月の同日または翌月の最終日に開始する必要があるため、最初の月が不可能な場合は、31 日目に登録した場合、その月の月の期間は 30 日に開始されます。 31 日がなく、2 月の最終日が 28 日または 29 日ではない

例:

とすれば

id 1 registered on 2012-12-16
id 2 registered on 2013-01-29

および次の表

+----+------------+
| id |    date    |
+----+------------+
|  1 | 2013-01-15 |
|  1 | 2013-01-16 |
|  1 | 2013-01-17 |
|  1 | 2013-01-17 |
|  2 | 2013-03-20 |
|  2 | 2013-03-21 |
|  2 | 2013-03-28 |
|  2 | 2013-03-29 |
|  2 | 2013-03-30 |
+----+------------+

結果は

+----+----------------------------+-------+
| id |           range            | count |
+----+----------------------------+-------+
| 1  | 2012-12-16, 2013-01-15     |     1 |
| 1  | 2013-01-16, 2013-02-15     |     3 |
| 2  | 2013-02-2[8|9], 2013-03-28 |     3 |
| 2  | 2013-03-29, 2013-04-28     |     2 |
+----+----------------------------+-------+

意図がより明確になることを願っています。

4

1 に答える 1