SQL

Jun. 10th, 2009 05:37 pm
[identity profile] karakhan.livejournal.com posting in [community profile] useful_faq
Народы, помогите. Переработал, видать, не могу сделать довольно простую вещь.

В результате запроса получаю 2 таблицы формата: [ID][Date1] и [ID][Date2]. Одному ID могут соответствовать несколько дат. Сами ID в таблицах совпадают. Каждому [Date1] соответствует не менее одного [Date2].
Надо получить из этого всего таблицу [ID][Date1][Date2], где каждой строке первой таблицы соответствует БЛИЖАЙШАЯ СЛЕДУЮЩАЯ [Date2] с таким же [ID].

Заранее спасибо.

Upd. Всем спасибо, помогли, разобрались.

Date: 2009-06-10 02:04 pm (UTC)
From: [identity profile] 3jia5l-ca6aka.livejournal.com
картинку хоть дайте, а то вечер же, мозги не алло

Date: 2009-06-10 02:13 pm (UTC)
From: [identity profile] denimih.livejournal.com
База какая? (Oracle, MS SQL, MySQL)
А так навскидку: кроме соединения сделать условие data2 > data1 и сгруппировать по Id с функцией min(data2)

Date: 2009-06-10 02:14 pm (UTC)
From: [identity profile] denimih.livejournal.com
сгруппировать по Id, data1

Date: 2009-06-10 02:38 pm (UTC)
From: [identity profile] denimih.livejournal.com
Я по Oracle специализируюсь, сделал бы так если ANSI синтаксис использовать:
select t1.id, t1.data1, min(t2.data2)
from table1 t1 left join table2 t2 on t1.id = t2.id
where t2.data2 > t1.data1
group by t1.id, t1.data1

Date: 2009-06-10 02:50 pm (UTC)
From: [identity profile] denimih.livejournal.com
как-то так - зависит от того какие результаты вы хотите получить и какие данные содержатся в таблице. насчет left join неуверен, лучше inner join наверное. Короче, дальше сами.

Date: 2009-06-10 02:59 pm (UTC)
From: [identity profile] alauxdo.livejournal.com
Немножко не так:

select t1.id, t1.data1, min(t2.data2)
from table1 t1 RIGHT OUTER JOIN table2 t2 on t1.id = t2.id
where t2.data2 > t1.data1
group by t1.id, t1.data1

Date: 2009-06-10 03:32 pm (UTC)
From: [identity profile] alauxdo.livejournal.com
"просто JOIN"а нету :)
Отличие left от right здесь только в том, из какой таблицы берется исходная дата для сравнения.
OUTER -- это синтаксис MS SQL ;)