#mysql #database #datetime #count #null
#mysql #База данных #дата и время #подсчет #null
Вопрос:
У меня есть таблица с именем tbl_remit.
id emp_id comp_name e_from e_to amount
1 123 a 2016-01-01 2016-01-31 10.00
2 123 a 2016-02-01 2016-02-29 5.00
3 123 a 2016-03-01 2016-03-31 20.00
4 456 b 2016-02-01 2016-02-29 50.00
5 789 c 2016-02-01 2016-02-29 10.00
6 789 c 2016-03-01 2016-03-31 15.00
Мне нужно посчитать и выбрать все emp_id, которые не платили с 2016-01-01 по 2016-01-31.
всего работодателей: 3 всего работодателей, которые не платили с (2016-01-01 по 2016-01-31): 2
id emp_id comp_name
1 456 b
2 789 c
Есть ли какой-нибудь способ посчитать, где нет данных? это утверждение, которое я использовал в этом заявлении.
SELECT COUNT(PEN) FROM view_remit WHERE E_FROM != '"amp; varDateFrom amp;"' AND E_TO != '"amp; varDateTo amp;"' AND Assigned_ACCOUNT = '"amp; varAssignedAccount amp;"'
Извините за этот вопрос новичка.
Комментарии:
1. что вы подразумеваете под тем, что нет данных, означает, что идентификатор 123 отсутствует во второй таблице?
2. я имею в виду, что это только в одной таблице. мне нужно посчитать emp_id тех, кто не платил с 2016-01-01 по 2016-01-31.
Ответ №1:
Если у вас есть только эта таблица, вы можете получить эти данные, используя отрицательное совпадение в подзапросе:
SELECT DISTINCT emp_id, comp_name
FROM tbl_remit
WHERE emp_id NOT IN
(SELECT emp_id
FROM tbl_remit
WHERE (e_from <= '2016-01-31' AND e_to >= '2016-01-01')
)
Сначала подзапрос выбирает все emp_id из строк из tbl_remit, которые относятся к рассматриваемому периоду времени. Затем вы запрашиваете те emp_id, которых нет в этом наборе.
Этот запрос не будет показывать emp_id тех, кто никогда ничего не платил. Если у вас есть отдельная таблица, содержащая возможные emp_id, вы также можете использовать эту таблицу в качестве основного запроса и сопоставить emp_id с данными в подзапросе tbl_remit.
Комментарии:
1. Боже мой! Большое вам СПАСИБО, СЭР! Я не знал, как использовать «DISTICNT» и «NOT IN» в одном заявлении. Это очень помогло моему коду. большое вам спасибо
2. Боже мой! Большое вам СПАСИБО, СЭР! Я не знал, как использовать «DISTICNT» и «NOT IN» в одном заявлении. Это очень помогло моему коду.
Ответ №2:
ВЫБЕРИТЕ DISTINCT emp_id,comp_name ИЗ tbl_remit, где e_from<= ‘2016-01-01’ И e_from>= ‘2016-01-31’;