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

Откуда: Ukraine, Kirovograd
Сообщений: 6958
Есть таблица 1 (поля НОМЕР и ДАТА).
Есть таблица 2 (поля НОМЕР и ДАТА).

Нужно получить таблицу 3 (поля НОМЕР и ДАТА), которая содержит все те значения из первой таблицы, которых нет во второй.

В голову ничего не приходит как:
объединить поля в одну текстовую строку и использовать оператор (not in).

Есть ли более простой способ?
13 апр 10, 12:48    [8621016]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
select t1.НОМЕР, t1.ДАТА 
from таблица1 t1
where not exists (select 1 from таблица2 t2 where t1.НОМЕР=t1.НОМЕР and t1.ДАТА=t2.ДАТА)

либо

select  t1.НОМЕР, t1.ДАТА 
from таблица1 t1 left outer join таблица2 t2 on (t1.НОМЕР=t2.НОМЕР and t1.ДАТА=t2.ДАТА)
where  t2.НОМЕР is null and t2.ДАТА  is null
13 апр 10, 12:55    [8621075]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Khod
Member

Откуда: Ukraine, Kirovograd
Сообщений: 6958
А будет ли работать такой запрос:

select t1.НОМЕР, t1.ДАТА 
from таблица1 t1
where t1.НОМЕР||t1.ДАТА not in (select t2.НОМЕР||t2.ДАТА from таблица2 t2)
13 апр 10, 14:29    [8621946]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
victor16
Member

Откуда:
Сообщений: 591
Работать будет, но, возможно, даст неверные результаты, если конкатенируются разные типы, или если одно из значений равно NULL.
13 апр 10, 14:30    [8621961]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Khod
Member

Откуда: Ukraine, Kirovograd
Сообщений: 6958
Есть дата date1.

Есть таблица Tabl с полем date.

Как выбрать из таблицы Tabl такую дату, которая будет больше date1, но при этом будет минимальна.

То есть в таблице есть даты и больше и меньше date1, но нужно выбрать слудующую за датой date1.

Будет ли правильным такой запрос:

Select min(date)
From Tabl t
Where (t.date > date1)
13 апр 10, 17:06    [8623103]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
Khod

Будет ли правильным такой запрос:
будет

Если нужна вся строка, то

Select /*+first_rows*/ first 1 *
From Tabl t
Where (t.date > date1)
order by t.date
13 апр 10, 17:19    [8623253]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Khod
Member

Откуда: Ukraine, Kirovograd
Сообщений: 6958
Есть таблица t1 (date1, date2).
Есть таблица t2 (date3).
date1, date2, date3 - тип ДАТА.

Нужно выбрать из t1 такие значения, которые
date2 - date1 > 1
и между date1 и date2 есть по крайней мере одно значение, которое не входит в перечень date3.

Я работаю на реальной базе. Мне нужно исключить выходные и праздничные дни. Как раз в таблице t2 они и хранятся.
14 апр 10, 10:55    [8626223]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Daugava
Member

Откуда: Riga-Kiev-Gurzuf
Сообщений: 718
select	t1.date1,
		t1.date2
from	t1
where	t1.date2-t1.date1>
		(select count(1) 
		from	t2 
		where	t2.date3 between t1.date1 and t1.date2)



Сообщение было отредактировано: 14 апр 10, 11:11
14 апр 10, 11:05    [8626332]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
select *
from t1
where date1<date2-1 and date2-date1 > select count(*) from t2 where date3 between date1 and date2


Плохое решение с таблицей t2, сделайте таблицу календарь где будут все дни, а праздники будут помечены
https://www.sql.ru/forum/actualthread.aspx?tid=13716

Сообщение было отредактировано: 14 апр 10, 11:17
14 апр 10, 11:11    [8626415]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Khod
Member

Откуда: Ukraine, Kirovograd
Сообщений: 6958
После того, как начал пользовать ся программой, изображённой на рисунке ниже, не даёт выполнить такой запрос:

Select (сам запрос)
Into temp t1;
Select *
From t1;
Drop table t1

Пишет -958 SQL error: Temp table (t1) already exists in session.

Что я делаю не так?

Из под старого SqlExplorera такие запросы всегда выполнялись.

К сообщению приложен файл. Размер - 0Kb
28 апр 10, 16:37    [8703622]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
АнатоЛой
Member

Откуда: Киев, Украина
Сообщений: 2897
Блог
Khod, вы после коннекта уже выполняли запрос ... into temp - но явно не выполнили drop
сделайте теперь drop а потом ... into temp
28 апр 10, 18:46    [8704740]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Khod
Member

Откуда: Ukraine, Kirovograd
Сообщений: 6958
Есть таблица 1 (дата1, дата2).
Есть таблица 2 (дата3, дата4).
дата1 < дата2
дата3 < дата4
дата1 и дата2 не нулевые.
дата2 и дата4 могут быть нулевыми.

Нужно получить таблицу 3 (дата1, дата2, дата3, дата4)
когда промежутки времени (дата1, дата2) и (дата3, дата4) включают хотя бы 1 одинаковый день.
1 июл 10, 15:08    [9032474]     Ответить | Цитировать Сообщить модератору
 Re: Sql-запрос  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
Khod
Есть таблица 1 (дата1, дата2).
Есть таблица 2 (дата3, дата4).
дата1 < дата2
дата3 < дата4
дата1 и дата2 не нулевые.
дата2 и дата4 могут быть нулевыми.

Нужно получить таблицу 3 (дата1, дата2, дата3, дата4)
когда промежутки времени (дата1, дата2) и (дата3, дата4) включают хотя бы 1 одинаковый день.



select *
from таблица_1, таблица_2
where дата3 between (дата1, дата2) or дата4 between (дата1, дата2)


https://www.sql.ru/forum/actualthread.aspx?tid=475528

Сообщение было отредактировано: 1 июл 10, 16:04
1 июл 10, 16:02    [9033073]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить