MySQL генерирует годовые отчеты по месяцам с указанием имени персонала

0

У меня два пользователя таблицы, а login_table

Таблица пользователей

 id   Name    status
----------------------
 1   Johan      1    
 2   Smith      1    
 .  .   .       .    
----------------------

Вход в систему

 id     user_id   login_date    hours
-------------------------------------
 1        1       2017-01-01    8    
 2        1       2017-01-02    7    
 3        2       2017-01-03    12   
 4        2       2017-01-02    10   
 .        .       .             .     
-------------------------------------

В любом случае мы можем получить данные, как показано ниже?

index   user_id  name   Jan  Feb    Mar ....    Dec Total
---------------------------------------------------------
1         1     Johan   100  120    115 ....    120  455
1         2     Smith   100  110    120 ....    110  440
.         .     .        .    .      .           .    .
---------------------------------------------------------

Мы уже сделали это с помощью PHP/MYSQL, но у вас много времени для обработки и выполнения. В любом случае мы можем напрямую извлечь это из MySQL?

Теги:
phpmyadmin

1 ответ

4
Лучший ответ

Я не знаю, какой index, но остальное - объединение, group by и условная агрегация:

select u.id, u.name,
       sum(case when month(l.login_date) = 1 then hours else 0 end) as jan,
       sum(case when month(l.login_date) = 2 then hours else 0 end) as feb,
       . . .,
       sum(hours)
from users u join
     login l
     on u.id = l.login_id
where l.login_date >= '2017-01-01' and l.login_date < '2018-01-01'
group by u.id, u.name;

Заметки:

  • Сравнение по датам использует >= и < по назначению. Это предпочтительнее, потому что MySQL может использовать индекс для данных.
  • Это предполагает, что вы хотите только пользователей, которые вошли в систему в течение года. В противном случае левое соединение подходит.
  • Я не знаю, какой index. Возможно, вы имеете в виду status?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню