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

Откуда: Санкт-Петербург
Сообщений: 35
Всем привет.
Не получается составить запрос, который вроде кажется несложным... Либо что-то сложное приходит в голову, а ведь наверняка можно проще.

Есть две таблицы.
Folders(id, folderId, name, createDate ..)
Items(id, i, itemId, folderId, name, createDate ..)


В обе таблицы пишутся непрерывным потоком данные. То есть все время добавляются новые фолдеры и айтемы. При этом может быть 1000 folder'ов с одинаковым folderId, но с разным name и соответственно датой (например folder был переименован - id при этом сохранился).
Сначала добавляется folder в Folders, а затем все item из него в Items.
Нужно выбрать все item в заданном диапазоне времени, при этом чтобы folder был привязан к нему именно тот, который был в то время (то есть последний фолдер [Folders.folderId=Items.folderId] перед датой Items.createDate).
Также, folder'а может и не быть у item.

Я написал запрос:
select item.name, item.createDate, fld.name, fld.createDate
from Items item
left join Folders fld on (item.folderId = fld.folderId)
where item.createDate > @startDate and item.createDate < @endDate
         and (fld.id is null or fld.createDate <= item.createDate)


но в этом случае выбирается самый первый folder (старый), а совсем не тот, который был во время получения item. Чем ограничить выбор даты слева я не понимаю..

Плиз хелп!
8 дек 11, 15:42    [11730302]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой запрос но не получается  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
select
 item.name, item.createDate, fld.name, fld.createDate
from
 Items item outer apply
 (select top (1) name, createDate from Folders where folderId = item.folderId and createDate <= item.createDate order by createDate desc) fld
where
 item.createDate > @startDate and item.createDate < @endDate;
Проектировщику сей схемы надо оторвать что-нибудь. Например, что надо возвращать, если есть фолдеры с одинаковыми folderId и createDate, но разными name?
8 дек 11, 16:07    [11730547]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой запрос но не получается  [new]
evtuhov1
Member

Откуда:
Сообщений: 1
Действительно
10 дек 11, 16:46    [11741885]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить