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

时间:2017-06-15 07:48:48

标签: sql sql-server sql-server-2008

希望在下面的查询中获得一些帮助。

我需要的是,只有在一个表中存在所有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

2 个答案:

答案 0 :(得分:1)

虽然有点健壮,但使用和子句会起作用

{
    "error": "invalid_grant",
    "error_description": "AADSTS50131: Windows device is not in required device state: domain_joined\r\nTrace ID: 93b98569-1c21-4f48-bee6-afa48aa73a00\r\nCorrelation ID: a52bb23c-dc2e-4fc1-83b7-b1d2a4d69e89\r\nTimestamp: 2017-06-14 11:20:06Z",
    "error_codes": [50131],
    "timestamp": "2017-06-14 11:20:06Z",
    "trace_id": "<masked>",
    "correlation_id": "<masked>",
    "claims": "{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"06ae1081-33ca-489c-85fa-42e53fc90f96\"]}}}"
}

答案 1 :(得分:1)

您可以使用GROUP BY进行COUNT,例如:

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;