Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 逐日分组_Mysql_Hibernate - Fatal编程技术网

Mysql 逐日分组

Mysql 逐日分组,mysql,hibernate,Mysql,Hibernate,我有一个行动表,每个行动有两个日期,开始日期和结束日期, 我想写一个请求,按天分组,但以连续的方式 例如: 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

我有一个行动表,每个行动有两个日期,开始日期和结束日期, 我想写一个请求,按天分组,但以连续的方式

例如:

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

11 ; 1

12 ; 1

14 ; 1

15 ; 1

因此,如果一项行动需要在三天内完成,我每天需要得到+1,我认为解决这一问题的唯一方法是用一个单独的表格列出所有的日期:

CREATE TABLE `days` (
  `day` date NOT NULL
)
已插入要分组的所有日期(例如,整个月)的位置:

然后运行此查询:

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
选择days.day,将(*)计数为cnt
从…起
剩余天数加入行动
ON days.day>=actions.startDate和days.day 0
我有个主意

我想为每一天创建一个新的计数,并按名称设置日期 (星期一)

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


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

如果您使用group by day(),或group by day(startDate),day(endDate),该怎么办?您尝试过吗?它能给你想要的结果吗?如果你不能创建新的表,我认为没有一个简单的解决方案。。。至少,不能使用普通sql。您可以用类似(选择日期('2012-10-10')联合选择日期('2012-10-11')联合选择日期('etc')的内容替换天数表,但我不太喜欢这个解决方案。。。。
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