У меня есть следующий (пример) таблица:SQL - выберите значение, которое соответствует только некоторым (несколько) уникальным условиям
+-------------+------------+----------+---------+
| alarminc_no | cust_name | event_id | site_no |
+-------------+------------+----------+---------+
| 99999 | Jonh Smith | UYALR | 9090 |
| 99999 | Jonh Smith | UYBR | 9090 |
| 99999 | Jonh Smith | PAF | |
| 77777 | Allan | UYBIC | 9090 |
| 77777 | Allan | UYBR | 9090 |
| 77777 | Allan | PAF | 9090 |
| 88888 | Susan | UYGR | 9090 |
| 88888 | Susan | UYLAR | 9090 |
| 88888 | Susan | PAF | 9090 |
+-------------+------------+----------+---------+
Мне нужна alarminc_no, который соответствует следующему event_id'S:
'СУПА', «PFA», «USABA», «USALR», «USBUR», «USDUR», «USFIR», «USPAN», «USTAM», «UYALR», «UYAVI», «UYBUR», «UYDIR», UYDUR ',' UYE73 ',' UYFIR ',' UYMED ', ' UYPAN ',' UYTAM
Есть МНОГО других event_ids, мне нужно ТОЛЬКО номер alarminc_no s, который содержит эти event_id, а не другие. Каждый Alarminc_no имеет несколько event_IDs, мне нужно каждый, который содержит по крайней мере одно из этих значений, не имеет значения, если содержит другой также, правило:
Каждый AlarmInc_no в ouptut, должны иметь в event_id обязательной ФАТ, PFA и некоторые из событий списка (эти события также являются обязательными, по крайней мере один из них должен присутствовать), а также может иметь и другие события.
Пользователь с этого форума помог мне с этим кодом, но работает частично, он дает мне много alarminc_no, что мне нужно, но некоторые из них отсутствуют, и я не знаю почему.
SELECT *
FROM MYTABLE
JOIN (
SELECT DISTINCT alarminc_no, system_no
FROM (
SELECT alarminc_no,system_no,
CASE WHEN event_id in
('PAF','PFA','USABA','USALR','USBUR','USDUR','USFIR','USPAN','USTAM',
'UYALR','UYAVI','UYBUR','UYDIR','UYDUR','UYE73','UYFIR','UYMED',
'UYPAN','UYTAM') THEN 0 ELSE 1 END AS BAD,
CASE WHEN event_id in ('PAF','PFA') THEN 1 ELSE 0 END AS GOOD
FROM MYTABLE
where event_date between '01/12/2016' and '31/12/2018'
) X
GROUP BY alarminc_no, system_no
HAVING SUM(BAD) = 0 AND SUM(GOOD) > 0 AND COUNT(*) > 1
) X ON MYTABLE.alarmic_no = X.alarmic_no AND MYTABLE.system_no = x.system_no
Это скриншот выхода:
https://i.stack.imgur.com/Hp3ax.png
Заранее спасибо за вашу помощь!
Какой ожидаемый выход? – wdosanjos
Если ваш первый оператор CASE представляет собой список «хороших» идентификаторов событий, не называйте их «плохими» ... назовите их «ХОРОШО». Переместите весь этот список до утверждения «GOOD». Затем удалите первый оператор CASE. Затем измените оператор HAVING на: 'HAVING SUM (GOOD)> 0' Если это не дает ваш ожидаемый результат, вы не будете правильно объяснять свои ограничения вывода. – abraxascarab
Я благодарю вас за ваше время !. Мне нужно получить alarminc_no, у которых есть PFA и PAF (всегда) и некоторые другие значения списка, покупайте ТОЛЬКО эти (есть много событийных событий, мне нужен каждый alarmINC, который имеет хотя бы одну ссылку на любое из значений список). Этот скрипт работает частично, по какой-то причине он дает мне часть событий, которые я хочу, но оставил другие, я должен уточнить, что каждый alarminc_no содержит несколько идентификаторов событий, и если AlarmInc имеет идентификатор события (например, UYALR), а другой нет Мне нужен он в выходе, так как UYALR присутствует. – Demian