Я рад, что на этот раз у меня есть вопрос, по крайней мере, на рабочем примере. Раньше это был эффективный запрос, когда у меня были только критерии, в которых результат был возвращен, если у него было count> = 1. Затем мне пришлось добавить счетчик для разных значений кода, и если они происходят 2 или более раз. Запрос продолжился от нескольких секунд до примерно 43 секунд.SQL Server: если одно значение в столбце встречается хотя бы один раз или другое значение более одного раза
Я думаю, что у меня есть логика, но мне было интересно, есть ли у кого-то более эффективный способ сделать это.
select person.person_id
from person
where
person.person_id in (
select procedure.person_id
from procedure
where
procedure.performed_by = '555555'
and procedure.code in (
'99201', '99202'
)
and year(procedure.service_date) = year(getdate())
group by procedure.person_id
having count(1) >= '1'
) -- having count >= 1 occurrences
or person.person_id in (
select person_id
from procedure
where
procedure.performed_by = '55555'
and code in (
'99304','99305'
)
and year(procedure.service_date) = year(getdate())
group by procedure.person_id
having count(1) >= '2'
) -- having count >= 2 occurrences
Спасибо за изменения, @marc_s! Я хотел сделать его доступным для поиска. это лучший источник для sql-информации, и я не хотел ограничивать его одной базой данных, потому что он довольно универсален. – jawz101
Можете ли вы разместить некоторые примеры данных и ожидаемый результат на основе такого примера или, что еще лучше, создать 'SQL Fiddle' [sqlfidle.com]. Кажется, что ваш запрос может и должен быть оптимизирован. –
Я все еще получаю зависание stackoverflow, и я начну использовать SQL Fiddle, поскольку это определенно помогает. Спасибо за ваш отзыв! – jawz101