Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Составление запроса.  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
Здравствуйте, уважаемые знатоки. Есть таблица со следующими полями:

Name, Date_Created, Start, End.

Таблица заполнена по следующим условиям: Если есть Date_Created, то заполняются поля Start и End(берутся временные промежутки, куда попадает Date_Created).
Если Date_Created пуста, то Start и End заполняются MAX(Start) и MAX(End) ( т.е. текущим промежутком, берутся из отдельной таблицы).

Задача следующая: Необходимо отобрать все записи, в которой будут ТОЛЬКО те записи, которые были в предыдущих временных промежутках, но не попали в текущий временной промежуток и где Date_Created НЕ пуста.
23 авг 17, 11:17    [20743406]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
pr0b3l1987
Задача следующая: Необходимо отобрать все записи, в которой будут ТОЛЬКО те записи, которые были в предыдущих временных промежутках, но не попали в текущий временной промежуток и где Date_Created НЕ пуста.

Ничего не понял в постановке задачи... Сформулируй еще раз пожалуйста.

Что означает "запись была во временном промежутке?"
Это значит "Date_Created BETWEEN Start AND End" или что-то другое?

Что значат фразы "предыдущий временной промежуток" и "текущий временной промежуток"? Предыдущий и текущий по отношению к чему?
23 авг 17, 12:00    [20743563]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
stomsky,

есть вторая таблица tbl2 со значениями с полями Start, End и значениями примерно следующими:

Start End

...
2017-07-09 2017-09-23
2017-07-24 2017-08-06
2017-08-07 2017-08-20
2017-08-21 2017-09-03


Если Date_Created попадает в один из промежутков из таблицы tbl2, то Start и End из tbl1 заполняются соответствующими значениями.

Если Date_Created пуста, то, соответственно, выставляются максимальные значения из таблицы tb2 ( т.е. текущий промежуток времени).

предыдущие временные промежутки - это все те, что не последние т.е. не текущий (2017-08-21 2017-09-03).
23 авг 17, 12:06    [20743578]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
pr0b3l1987
Start End

...
2017-07-09 2017-09-23 <-- ??????
2017-07-24 2017-08-06
2017-08-07 2017-08-20
2017-08-21 2017-09-03

В этом примере первая строка задает временной интервал, перекрывающий все три следующих (с июля по сентябрь). Это очепятка? Я правильно догадываюсь, что интервалы в tbl2 не пересекаются, а идут строго один за другим?

pr0b3l1987
Если Date_Created попадает в один из промежутков из таблицы tbl2, то Start и End из tbl1 заполняются соответствующими значениями.
Если Date_Created пуста, то, соответственно, выставляются максимальные значения из таблицы tb2 ( т.е. текущий промежуток времени).

Значения в столбцах tbl1.Start и tbl1.End имеют какое-то значение в контексте данной задачи?
По-моему, сравнивать надо значения tbl1.Date_Created с tbl2.Start и tbl2.End.
Или я все-таки неверно понимаю задачу?

pr0b3l1987
предыдущие временные промежутки - это все те, что не последние т.е. не текущий (2017-08-21 2017-09-03).

Т.е. "текущий временной промежуток" - это строка из таблицы tbl2, задающая интервал, в который попадает сегодняшняя дата? Вот сейчас у меня на календаре 23.08.2017, поэтому "текущим" стал приведенный тобой интервал (2017-08-21 2017-09-03). Верно?
23 авг 17, 12:41    [20743723]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
stomsky
Значения в столбцах tbl1.Start и tbl1.End имеют какое-то значение в контексте данной задачи?

Хотя нет, пожалуй имеют. Это скорее содержимое tbl2 не нужно в запросе.
Предлагаю такой вариант (T-SQL):
автор
SELECT *
FROM tbl1
WHERE End < getdate()
AND Date_Created IS NOT NULL
23 авг 17, 12:48    [20743749]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
stomsky
stomsky
Значения в столбцах tbl1.Start и tbl1.End имеют какое-то значение в контексте данной задачи?

Хотя нет, пожалуй имеют. Это скорее содержимое tbl2 не нужно в запросе.
Предлагаю такой вариант (T-SQL):
автор
SELECT *
FROM tbl1
WHERE End < getdate()
AND Date_Created IS NOT NULL


ДА, запрос почти верен, нужно обыграть только еще одно условие - Если Name есть и в текущем Start и End, и в прошлых, то их нужно отсечь, и оставить только тех, кто есть в прошлых, но нет в текущем..

Прошу прощение, что сложно излагаюсь.
23 авг 17, 13:35    [20743941]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
pr0b3l1987
Если Name есть и в текущем Start и End, и в прошлых, то их нужно отсечь, и оставить только тех, кто есть в прошлых, но нет в текущем..


Вот так?

SELECT *
FROM tbl1
WHERE End < getdate()
AND Date_Created IS NOT NULL
[b]AND Name NOT IN (SELECT Name FROM tbl1 WHERE Begin >= getdate())[/b]


pr0b3l1987
Прошу прощение, что сложно излагаюсь.

Не сложно. Просто такое ощущение, что русский тебе не родной язык. Я минут по пять медитирую над твоим текстом.
Не обижайся только
23 авг 17, 14:22    [20744166]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
Точнее так (без "[b]"):
SELECT *
FROM tbl1
WHERE End < getdate()
AND Date_Created IS NOT NULL
[b]AND Name NOT IN (SELECT Name FROM tbl1 WHERE Begin >= getdate())[/b]
23 авг 17, 14:23    [20744168]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 123
Да что такое?! ))))
Вот так(без "[b]"):
SELECT *
FROM tbl1
WHERE End < getdate()
     AND Date_Created IS NOT NULL
     AND Name NOT IN (SELECT Name FROM tbl1 WHERE Begin >= getdate())
23 авг 17, 14:23    [20744174]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса.  [new]
pr0b3l1987
Member

Откуда:
Сообщений: 14
stomsky,

Да, то, что нужно. Пишу так коряво, потому-что на самом деле, сам запрос выглядит чудовищно, и это только его малая часть. У самого в голове уже мешанина:)
Спасибо тебе больщушее!
Тему можно закрывать :)
23 авг 17, 15:00    [20744360]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить