MySQL从复杂查询分组

时间:2016-10-17 13:59:07

标签: mysql group-by

我需要创建一个看起来像这个图像的查询结果:

table screen shot

您可以忽略用户的名称,user_id暂时没问题。每个用户可以有一天的几次时间表。因此,我需要计算小时数,并将其放在自己的列中,以便在一周中的某一天使用。然后在最后总计。以下是数据库的屏幕截图:

database screen shot

到目前为止,我所拥有的这些内容可以让我获得本周总计的日期,但不会将一周中的日期分为一个记录,作为自己的列和总计。任何帮助,将不胜感激。谢谢!

SELECT user_id, WEEKDAY(start_date) AS day, (select time_to_sec(timediff(end_date, start_date )) / 3600) AS hours FROM `timesheet_table` WHERE id > 0 GROUP BY day, user_id

2 个答案:

答案 0 :(得分:1)

如果您需要一个总计,您可以使用总和和

分组

在“分组”中,您不能使用别名,但应使用表达式

  SELECT 
        user_id
      , WEEKDAY(start_date) AS day
      , sum((select time_to_sec(timediff(end_date, start_date )) / 3600)) AS hours 
  FROM `timesheet_table` 
  WHERE id > 0 
  GROUP BY WEEKDAY(start_date), user_id

答案 1 :(得分:1)

E.g:

  SELECT user_id
       , DATE(start_date) dt
       , SEC_TO_TIME(SUM(TIME_TO_SEC(end_date)-TIME_TO_SEC(start_date))) day_total
-- [or , SUM(TIME_TO_SEC(end_date)-TIME_TO_SEC(start_date))/3600 day_total] 
    FROM my_table 
   WHERE start_date BETWEEN '2016-10-01 00:00:00' AND '2016-10-07 23:59:59' 
   GROUP 
      BY user_id
     , DATE(start_date);

问题的其余部分(缺少天数,显示问题,每周总计等)通常会在应用程序级代码中处理。