![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Народы, помогите. Переработал, видать, не могу сделать довольно простую вещь.
В результате запроса получаю 2 таблицы формата: [ID][Date1] и [ID][Date2]. Одному ID могут соответствовать несколько дат. Сами ID в таблицах совпадают. Каждому [Date1] соответствует не менее одного [Date2].
Надо получить из этого всего таблицу [ID][Date1][Date2], где каждой строке первой таблицы соответствует БЛИЖАЙШАЯ СЛЕДУЮЩАЯ [Date2] с таким же [ID].
Заранее спасибо.
Upd. Всем спасибо, помогли, разобрались.
В результате запроса получаю 2 таблицы формата: [ID][Date1] и [ID][Date2]. Одному ID могут соответствовать несколько дат. Сами ID в таблицах совпадают. Каждому [Date1] соответствует не менее одного [Date2].
Надо получить из этого всего таблицу [ID][Date1][Date2], где каждой строке первой таблицы соответствует БЛИЖАЙШАЯ СЛЕДУЮЩАЯ [Date2] с таким же [ID].
Заранее спасибо.
Upd. Всем спасибо, помогли, разобрались.
no subject
Date: 2009-06-10 02:04 pm (UTC)no subject
Date: 2009-06-10 02:19 pm (UTC)no subject
Date: 2009-06-10 02:13 pm (UTC)А так навскидку: кроме соединения сделать условие data2 > data1 и сгруппировать по Id с функцией min(data2)
no subject
Date: 2009-06-10 02:14 pm (UTC)no subject
Date: 2009-06-10 02:22 pm (UTC)GROUP BY, конечно, самое напрашивающиеся решение, но как его реализовать в такой ситуации, я не знаю (опыта у меня маловато), ибо у меня группировку не принимает, когда выводятся столбцы разных таблиц.
no subject
Date: 2009-06-10 02:38 pm (UTC)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
no subject
Date: 2009-06-10 02:50 pm (UTC)no subject
Date: 2009-06-10 03:26 pm (UTC)А если делать все по Вашей подсказке (min(t2.data2), group by t1.id, t1.data1) то работает все просто прекрасно!
Громадное спасибо!
no subject
Date: 2009-06-10 02:59 pm (UTC)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
no subject
Date: 2009-06-10 03:27 pm (UTC)Но и Вам спасибо за помощь. ;)
no subject
Date: 2009-06-10 03:32 pm (UTC)Отличие left от right здесь только в том, из какой таблицы берется исходная дата для сравнения.
OUTER -- это синтаксис MS SQL ;)