Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отбор строк по условию, что другое поле одновременно содержит необходимые условия / 4 сообщений из 4, страница 1 из 1
27.10.2021, 14:24
    #40107379
Jonny_Bob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
Всем привет.
Не знаю даже как через поисковик коротко сформулировать вопрос, поэтому вынужденно создаю тему.
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

Какие есть более адекватные варианты по быстродействию и объему кода запроса?
...
Рейтинг: 0 / 0
27.10.2021, 14:30
    #40107383
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
Jonny_Bob,

Перед вашими манипуляциями
Код: sql
1.
Select Distinct [Название компании], [Год подачи заявки]

не предлагать? Там кстати потом и Count можно использовать по названию компании
...
Рейтинг: 0 / 0
27.10.2021, 14:38
    #40107388
Jonny_Bob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
Спасибо, все понял кажется :)
Выгружаем DISTINCT компании и годы подачи заявки, потом используем это как подзапрос для FROM (или как CTE), и говорим что выдай все компании, WHERE COUNT(DISTINCT [год подачи заявки])=3.

Такая идея?
...
Рейтинг: 0 / 0
27.10.2021, 14:42
    #40107395
Jonny_Bob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор строк по условию, что другое поле одновременно содержит необходимые условия
Jonny_Bob
Спасибо, все понял кажется :)
Выгружаем DISTINCT компании и годы подачи заявки, потом используем это как подзапрос для FROM (или как CTE), и говорим что выдай все компании, WHERE COUNT(DISTINCT [год подачи заявки])=3.

Такая идея?


Ну точнее отдельное поле с COUNT(DISTINCT [год подачи заявки]), и потом HAVING COUNT(DISTINCT [год подачи заявки])=3
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отбор строк по условию, что другое поле одновременно содержит необходимые условия / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]