MySQL: выберите данные в диапазоне дат, если число дат превышает заданное количество - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу выбрать набор сотрудников из журнала посещаемости между двумя датами, которые к тому времени пришли на работу более 10 дней.Чтобы работодатель уже превысил 10 дней или превысил 10 дней в течение проверяемого диапазона дат.Таблица журнала (см. Ниже) содержит одну запись для каждого работодателя на каждый день.

emp_id | date
1      | 2019-01-25
1      | 2019-01-26
1      | 2019-01-27
1      | 2019-01-28
1      | 2019-01-29
1      | 2019-01-30
1      | 2019-01-31
1      | 2019-02-01
1      | 2019-02-02
1      | 2019-02-03
1      | 2019-02-04

2      | 2019-01-29
2      | 2019-01-30
2      | 2019-01-31
2      | 2019-02-01
2      | 2019-02-02
2      | 2019-02-03
2      | 2019-02-04
2      | 2019-02-05

3      | 2019-01-23
3      | 2019-01-24
3      | 2019-01-25
3      | 2019-01-26
3      | 2019-01-27
3      | 2019-01-28
3      | 2019-01-29
3      | 2019-01-30
3      | 2019-01-31
3      | 2019-02-01
3      | 2019-02-02    

Выбор диапазона дат с 2019-02-01 по 2019-02-05.

  • Emp1 - к 2019-02-01 он проработал 8 дней.
  • Emp 1 - К 2019-02-04 он проработал 11 дней.
  • Emp 2 - К 2019-02-01 он проработал 4 дня.
  • Emp 2 - К 2019-02-05 он проработал 8 дней.
  • Emp 3 - К 2019-02-01 он проработал 10 дней.
  • Emp 3 - К 2019-02-05 он проработал 14 дней.

Таким образом, из вышеупомянутого набора данных должны быть выбраны только Emp 1 и Emp 3.Работодатель должен превышать 10 дней в диапазоне дат.

Я написал следующий запрос в MySQL, но он не выполняет работу.Как это должно быть написано?

SELECT emp_id FROM log
WHERE date BETWEEn '2019-02-01' AND '2019-02-05'
GROUP BY emp_id
HAVING COUNT(emp_id) > 14;

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете разделить условие даты между WHERE и HAVING:

SELECT emp_id
FROM log
WHERE date <= '2019-02-05' -- select all entries until this date
GROUP BY emp_id
HAVING MAX(date) >= '2019-02-01' -- employee has at least one log entry on / after this date
AND COUNT(emp_id) > 10 -- more than 10 entries between the two dates
0 голосов
/ 07 февраля 2019

Я думаю, что вам нужны записи о сотрудниках, рабочие дни которых больше и равны 10. Таким образом, вы можете применить подзапрос, который может сформулировать количество этих сотрудников и вернуть результат обратно в основной запрос.

SELECT l1.emp_id FROM log l1
WHERE (select Count(*) from log l2 
         where l1.emp_id=l2.emp_id 
          && l2.date BETWEEN '2019-02-01' AND '2019-02-05') >=10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...