繁体   English   中英

SQL-仅在表中存在3个事件时才返回结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM