|
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
|
|||
---|---|---|---|
#18+
Всем привет. Не знаю даже как через поисковик коротко сформулировать вопрос, поэтому вынужденно создаю тему. MsSQL 14.0 Допустим есть таблица типа: Название компании/ Год подачи заявки на кредит Ромашка/ 2020 Ромашка/ 2019 Ромашка/ 2021 Березка / 2019 Березка / 2020 Нужно выбрать только названия компаний, которые подавали заявки на кредит в каждом из годов в диапазоне 2019-2021 (т.е. в примере выше этому критерию соответствует только Ромашка). Мои идеи как это решить пока довольно длинные по написанию и долгие: 1. Через FOR XML PATH сначала сконкатенатить в одной строке все годы (предварительно их отсортировав по ASC), и затем отфильтровать по этому полю, что оно равно «201920202021». 2. Cделать дополнительное поле с проверкой через кучу EXISTS (в оригинале нужна проверка не за 3 года, а за 15. Поэтому по идее будет считаться довольно долго на выборке из 300-400 тыс. строк), типа: ‘Признак соответствия’= CASE WHEN EXISTS(SELECT [Название компании] FROM Baza b1 WHERE b1.[Название компании]=Main.[Название компании] AND b1.[год заявки]=2019) AND EXISTS(SELECT [Название компании] FROM Baza b1 WHERE b1.[Название компании]=Main.[Название компании] AND b1.[год заявки]=2020) AND EXISTS(SELECT [Название компании] FROM Baza b1 WHERE b1.[Название компании]=Main.[Название компании] AND b1.[год заявки]=2021) TEHN ‘Соответствует’ ELSE ‘Не соответствует’ END Какие есть более адекватные варианты по быстродействию и объему кода запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 14:24 |
|
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
|
|||
---|---|---|---|
#18+
Jonny_Bob, Перед вашими манипуляциями Код: sql 1.
не предлагать? Там кстати потом и Count можно использовать по названию компании ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 14:30 |
|
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
|
|||
---|---|---|---|
#18+
Спасибо, все понял кажется :) Выгружаем DISTINCT компании и годы подачи заявки, потом используем это как подзапрос для FROM (или как CTE), и говорим что выдай все компании, WHERE COUNT(DISTINCT [год подачи заявки])=3. Такая идея? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 14:38 |
|
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
|
|||
---|---|---|---|
#18+
Jonny_Bob Спасибо, все понял кажется :) Выгружаем DISTINCT компании и годы подачи заявки, потом используем это как подзапрос для FROM (или как CTE), и говорим что выдай все компании, WHERE COUNT(DISTINCT [год подачи заявки])=3. Такая идея? Ну точнее отдельное поле с COUNT(DISTINCT [год подачи заявки]), и потом HAVING COUNT(DISTINCT [год подачи заявки])=3 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 14:42 |
|
|
start [/forum/topic.php?fid=46&msg=40107388&tid=1684163]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
131ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 222ms |
0 / 0 |