[英]SQL - Return results only if 3 events exist in table
希望在下面的查询中获得一些帮助。
我需要的是,仅在一个表中存在所有3个事件ID的情况下才返回结果。
终端ID在此表中可以具有与其关联的多个事件ID。 我只在寻找在指定日期范围内有3个特定事件的终端ID:
下面的查询返回具有三个事件ID之一的终端ID,但我不确定如何告诉它获得所需的信息。
SELECT
EJTM.terminal_id
FROM
IG_LOG..EJ_Terminal_Master EJTM
JOIN it_sysweb..EJ_Tran_Event_Master EJEM ON EJTM.event_type_id = EJEM.EJ_tran_event_id
WHERE
EJEM.EJ_tran_event_id in
(
5011 --SignOn
,5119 --Reinit Printer
,5101 --NoSale
)
AND
EJTM.event_date_time between '2017-06-06 03:00:00.000' and '2017-06-08 03:00:00.000'
AND
EJEM.language_id = 'EN-US'
GROUP BY
EJTM.terminal_id
虽然有点健壮,但使用and子句仍然有效
WHERE
EJEM.EJ_tran_event_id = '5011' --SignOn
AND EJEM.EJ_tran_event_id = '5119' --Reinit Printer
AND EJEM.EJ_tran_event_id = '5101' --NoSale
AND
EJTM.event_date_time between '2017-06-06 03:00:00.000' and '2017-06-08 03:00:00.000'
AND
EJEM.language_id = 'EN-US'
您可以使用COUNT
执行GROUP BY
,例如:
SELECT tm.terminal_id
FROM IG_LOG..EJ_Terminal_Master.tm JOIN it_sysweb..EJ_Tran_Event_Master em
ON tm.event_type_id = em.EJ_tran_event_id
WHERE em.EJ_tran_event_id IN (5011, 5119, 5101)
AND em.event_date_time between '2017-06-06 03:00:00.000' AND '2017-06-08 03:00:00.000'
AND em.language_id = 'EN-US'
GROUP BY tm.terminal_id
HAVING COUNT(DISTINCT em.EJ_tran_event_id) = 3;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.