запрос данных с помощью sqlite - PullRequest
0 голосов
/ 08 мая 2020

У меня есть данные в базе данных sqlite, которая содержит следующие столбцы:

date | name | id | code 

все как TEXT (я получил его из файла csv), и я хочу создать запрос, который находит все name s, которые имеют code ABC120, но не ABC306 или ABC305 на одном и том же date и group результате GROUP BY name. Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Если вы хотите использовать GROUP BY, вы должны сначала group by name, date и установить условия в предложении HAVING, но также вы должны использовать DISTINCT, чтобы результаты не содержали повторяющихся имен:

select distinct name
from tablename
group by name, date
having sum(code = 'ABC120') > 0 and sum(code in ('ABC305', 'ABC306')) = 0;

Вы можете получить такие же результаты с помощью EXISTS:

select distinct t.name
from tablename t
where t.code = 'ABC120'
and not exists (select 1 from tablename where name = t.name and date = t.date and code in ('ABC305', 'ABC306'))
1 голос
/ 08 мая 2020

Вы можете использовать having:

select date, name
from t
where code in ('ABC120', 'ABC306', 'ABC305')
group by date, name
having min(code) = 'ABC120' and max(code) = 'ABC120';

Примечание: из-за трех выбранных вами кодов вы можете просто использовать max(code) = 120. Однако это не распространяется на другие значения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...