Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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_Select_Sum_Aggregate Functions - Fatal编程技术网

MySQL复杂选择与时间聚合

MySQL复杂选择与时间聚合,mysql,select,sum,aggregate-functions,Mysql,Select,Sum,Aggregate Functions,SQL FIDLE中的模式: 我想做的是让所有人都投入到这样一个项目中: Date | Project | Persons | Total Time ------------------------------------------------------------------------ 25.11.2013 | Project One | Jane Doe hh:mm, John Doe hh:mm | Total hh:

SQL FIDLE中的模式:

我想做的是让所有人都投入到这样一个项目中:

Date       | Project     | Persons                        | Total Time
------------------------------------------------------------------------
25.11.2013 | Project One | Jane Doe hh:mm, John Doe hh:mm | Total hh:mm
26.11.2013 | Project One | Jane Doe hh:mm, John Doe hh:mm | Total hh:mm
27.11.2013 | Project One | Jane Doe hh:mm, John Doe hh:mm | Total hh:mm
28.11.2013 | Project Four| Jane Doe hh:mm, John Doe hh:mm | Total hh:mm 
我真的不知道如何得到这个输出,尤其是逗号分隔的部分

希望有人有或有类似的问题,帮助我找到解决方案。

根据你的数据——我相信你需要从总结每个人每天在每个项目中所做的事情开始。(你有一个例子,John Doe一天工作两次)。该解决方案是(workunits列只是想知道每个项目中是否有一个人每天有多个记录):

然后,为了得到最终结果,您需要每天对每个项目进行总结

SELECT `date`, projectstart
     , GROUP_CONCAT(CONCAT(person,' ',CAST(worked AS time))) AS people
     , SUM(worked) AS worked
FROM (SELECT `date`, projectstart, person, COUNT(*) as workunits
             , SUM(TIMEDIFF(CAST(end AS time), CAST(begin AS time))) AS worked
      FROM IMPORT
      GROUP BY `date`, projectstart, person) AS t
GROUP BY `date`, projectstart;

你能解释一下这一栏的意思吗?具体来说,哪一列是项目,如何计算总时间,以及姓名右侧的时间值来自何处。列名在fiddle中不相同von是什么,PROJECT在哪里,Date?抱歉。我在这里更新了小提琴。ProjectStart和ProjectEnd始终相同。
SELECT `date`, projectstart
     , GROUP_CONCAT(CONCAT(person,' ',CAST(worked AS time))) AS people
     , SUM(worked) AS worked
FROM (SELECT `date`, projectstart, person, COUNT(*) as workunits
             , SUM(TIMEDIFF(CAST(end AS time), CAST(begin AS time))) AS worked
      FROM IMPORT
      GROUP BY `date`, projectstart, person) AS t
GROUP BY `date`, projectstart;