0

我有一个动作表,每个动作都有两个日期,startDate 和 endDate,我想写一个按天分组的请求,但是以连续的方式

例子:

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

因此,如果三天内需要一项操作,我每天都会获得 +1

4

2 回答 2

0

我有个主意

我想为每一天创建一个新的计数,并按名称格式化日期(星期一....)

所以我每天都会得到一个结果列

我的开始日期;endDate 是一周的两个限制

于 2012-10-29T10:05:27.847 回答
0

我认为解决这个问题的唯一方法是在所有日子里都有一个单独的表格:

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

您已经插入了要分组的所有日期(例如,整个月):

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 回答