2016-10-17 2 views
-1

мне нужно создать запрос, который выглядит, как это изображение с результатом:MySQL группировка из сложного запроса

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 
+0

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

Понятия не имею, почему кто-то дал это голосование. Это очень четкий и краткий вопрос. –

ответ

1

Если вам нужен totat вы можете использовать сумму и группу по

В Группе вы не можете использовать псевдоним, но вы должны использовать выражение

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

Например:

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); 

Остальная часть проблемы (отсутствующие дни, проблемы с отображением, еженедельные итоги и т. Д.) Обычно обрабатываются в приложении код уровня.

Смежные вопросы