0

アクションのテーブルがあります。各アクションにはstartDateとendDateの2つの日付があります。日ごとにグループ化するリクエストを作成したいのですが、連続して作成します。

例:

action ;  startDate ;  endDate

Action1 ; 2012-10-10 ; 2012-10-10

Action2 ; 2012-10-10 ; 2012-10-12

Action3 ; 2012-10-14 ; 2012-10-15

私のリクエストは

SELECT DAY(startDate), COUNT(Name) FROM ActionTable 
WHERE startDate < '2012-10-09' and endDate > '2012-10-15'
GROUP BY DAY(startDate)

このリクエストは私にそれを返します:

10 ; 2

14 ; 1

この結果を取得するにはリクエストが必要です

10 ; 2

11 ; 1

12 ; 1

14 ; 1

15 ; 1

したがって、アクションが3日以内にある場合、毎日+1を取得する必要があります

4

2 に答える 2

0

これを解決する唯一の方法は、すべての日を含む別のテーブルを用意することだと思います。

CREATE TABLE `days` (
  `day` date NOT NULL
)

グループ化するすべての日 (たとえば、1 か月全体) が既に挿入されている場合:

INSERT INTO `days` (`day`) VALUES
  ('2012-10-10'),
  ('2012-10-11'),
  ('2012-10-12'),
  ('2012-10-13'),
  etc.

次に、次のクエリを実行します。

SELECT days.day, count(*) as cnt
FROM
  days LEFT JOIN actions
  ON days.day >= actions.startDate and days.day <= endDate
GROUP BY days.day
HAVING Count(*)>0
于 2012-10-29T09:51:24.473 に答える
0

考えがある

毎日新しいカウントを作成し、名前で日付をフォーマットすると思います(月曜日....)

だから私は毎日結果の列を取得します

私の開始日; endDate は週の 2 つの制限です

于 2012-10-29T10:05:27.847 に答える