Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посоветуйте с запросом / 22 сообщений из 22, страница 1 из 1
27.05.2019, 09:56
    #39818615
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Добрый день. Пожалуйста, посоветуйте правильно организовать запрос, есть таблица в ней 3 поля (name nvarchar(50), dateB datetime, dateE datetime), т.е. наименование и интервал дат, мне нужно организовать запрос, чтобы получить записи в которых интервалы дат пересекаются и совпадают
...
Рейтинг: 0 / 0
27.05.2019, 10:10
    #39818622
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968,

А у вас дата Б всегда меньше датаЕ? Если да, то попробуйте оконные функции. Сортировка по первой дате и сравнение lag lead даст вам все варианты

По запросу "Интервалы дат" есть много тем с решениями на форуме
...
Рейтинг: 0 / 0
27.05.2019, 10:12
    #39818623
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968Добрый день. Пожалуйста, посоветуйте правильно организовать запрос, есть таблица в ней 3 поля (name nvarchar(50), dateB datetime, dateE datetime), т.е. наименование и интервал дат, мне нужно организовать запрос, чтобы получить записи в которых интервалы дат пересекаются и совпадают

Код: sql
1.
2.
3.
select *
from [есть таблица] a
cross apply (select * from [есть таблица] b where a.dateB between b.dateB and b.dateE) c



ну а "совпадают" думаю уже и сам сообразишь :)
...
Рейтинг: 0 / 0
27.05.2019, 10:41
    #39818637
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968,

Есть несколько интервалов:
0..9
1..4
2..3
3..7
5..8

Что с чем считать пересекающимся или совпадающим??
...
Рейтинг: 0 / 0
27.05.2019, 10:44
    #39818640
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
любое пересечение дат, либо частичное, либо один интервал входит в другой
...
Рейтинг: 0 / 0
27.05.2019, 10:50
    #39818644
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968,

и как вы видите для себя вывод результата на приведенном примере?
...
Рейтинг: 0 / 0
27.05.2019, 11:05
    #39818648
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
все строки
...
Рейтинг: 0 / 0
27.05.2019, 11:14
    #39818651
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968,

тогда ответ уже дан. осталось проверить, что он корректен.
...
Рейтинг: 0 / 0
27.05.2019, 11:18
    #39818656
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
patrick1968все строки
Код: sql
1.
2.
3.
4.
5.
select
 *
from
 [есть таблица] a join
 [есть таблица] b on b.dateB <= a.dateE and b.dateE >= a.dateB;
...
Рейтинг: 0 / 0
27.05.2019, 12:17
    #39818697
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
invm,

думается, строк будет - чуть больше, чем все...
...
Рейтинг: 0 / 0
27.05.2019, 12:24
    #39818709
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина Аннаinvm,

думается, строк будет - чуть больше, чем все...Что это значит?
...
Рейтинг: 0 / 0
27.05.2019, 12:26
    #39818711
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
PizzaPizza... попробуйте оконные функции. Сортировка по первой дате и сравнение lag lead даст вам все варианты...и показать решение на вот этих тестовых данных сможете?

Код: sql
1.
2.
3.
4.
5.
with [есть таблица] as
(
select * from (values (1,9),(2,3),(4,5),(6,7),(8,9))v(dateB,dateE)
)
select * from  [есть таблица] 
...
Рейтинг: 0 / 0
27.05.2019, 12:27
    #39818713
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
iapЧто это значит?Это значит, что автор вопроса получит в ответ количество строк больше, чем есть в исходной таблице. ДУмаю, он ожидает немного другого результата... Но автору, конечно же, виднее
...
Рейтинг: 0 / 0
27.05.2019, 12:29
    #39818715
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
iap,

именно потому и пытаюсь допроситься у автора: как он себе видит результат работы запроса?
К вам лично - претензий нет. ;)
...
Рейтинг: 0 / 0
27.05.2019, 12:32
    #39818718
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина АннаiapЧто это значит?Это значит, что автор вопроса получит в ответ количество строк больше, чем есть в исходной таблице. ДУмаю, он ожидает немного другого результата... Но автору, конечно же, виднееКаждая строка может пересекаться с несколькими другими.
Это же нормально. Другое дело, что каждое пересечение будет получено дважды:
Пересечение строки 1 и строки 2 и пересечение строки 2 и строки 1, хоть это и одно и то же.
Добавить сравнение айдишников.
...
Рейтинг: 0 / 0
27.05.2019, 12:34
    #39818720
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина Аннаiap,

именно потому и пытаюсь допроситься у автора: как он себе видит результат работы запроса?
К вам лично - претензий нет. ;)Я просто поинтересовался. Ибо слишком общее замечание.
О взаимных претензиях и речи быть не может, как мне кажется.
...
Рейтинг: 0 / 0
27.05.2019, 12:37
    #39818723
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
iap,

это ваше решение задачи, исходя из вашего же её понимая.
Моё понимание - другое. Вывести строки, имеющие факт пересечения (по сути - EXISTS-подзапрос).
А что имел ввиду автор - это уже совсем третье...
...
Рейтинг: 0 / 0
27.05.2019, 12:38
    #39818725
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
iap,

ждем автора. Иначе - непонятно, какую именно задачу нужно решать.
...
Рейтинг: 0 / 0
27.05.2019, 12:44
    #39818729
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина АннаМоё понимание - другое. Вывести строки, имеющие факт пересечения (по сути - EXISTS-подзапрос).Проблема удвоения пересекающейся пары будет и в этом случае. Если не принять мер против этого.
...
Рейтинг: 0 / 0
27.05.2019, 13:22
    #39818760
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
iapПроблема удвоения пересекающейся пары будет и в этом случае. Если не принять мер против этого.Ни одна строка исходной таблицы не будет выведена дважды. Будут выведены все строки, для которых имеется хотя бы одно пересечение по датам с другими строками...
Другое дело, что может возникнуть "ложное самопересечение" строки самой на себя. Вот с этим, действительно, нужно будет побороться...
...
Рейтинг: 0 / 0
27.05.2019, 13:30
    #39818776
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина АннаiapЧто это значит?Это значит, что автор вопроса получит в ответ количество строк больше, чем есть в исходной таблице. ДУмаю, он ожидает немного другого результата... Но автору, конечно же, виднее
Просто каждая строка войдет на самом деле два раза - это легко отфильтровать по какому-нибудь дополнительному критерию (подобно тому, как в типовой задаче на поиск дубликатов).
...
Рейтинг: 0 / 0
27.05.2019, 19:03
    #39818942
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с запросом
Щукина АннаPizzaPizza... попробуйте оконные функции. Сортировка по первой дате и сравнение lag lead даст вам все варианты...и показать решение на вот этих тестовых данных сможете?

Код: sql
1.
2.
3.
4.
5.
with [есть таблица] as
(
select * from (values (1,9),(2,3),(4,5),(6,7),(8,9))v(dateB,dateE)
)
select * from  [есть таблица] 



Конечно могу. Вопрос (как обычно) в том, какое решение нужно показать. Имхо с оконными функциями удобнее решить почти все варианты, которые автор мог может себе представлять.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посоветуйте с запросом / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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