我需要创建一个看起来像这个图像的查询结果:
您可以忽略用户的名称,user_id暂时没问题。每个用户可以有一天的几次时间表。因此,我需要计算小时数,并将其放在自己的列中,以便在一周中的某一天使用。然后在最后总计。以下是数据库的屏幕截图:
到目前为止,我所拥有的这些内容可以让我获得本周总计的日期,但不会将一周中的日期分为一个记录,作为自己的列和总计。任何帮助,将不胜感激。谢谢!
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
答案 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);
问题的其余部分(缺少天数,显示问题,每周总计等)通常会在应用程序级代码中处理。