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

Откуда: Москва
Сообщений: 508
Есть таблица путевых листов.
Машина, на которую путевой лист - поле ID_TECLST
Надо получить в одной строке, и данные по текущей путевки, и данные по предыдущей путевке на эту машину

Примерно так, только это не работает)
SELECT  ord.tOrd, ord.goFuel, child.goFuel 
	FROM dbo.Ord ord
	left join (select ID_TECLST, tOrd, goFuel 
			FROM dbo.Ord o1
			where ismark=0
				and tOrd=(select max(o2.tOrd)
					from dbo.Ord o2
					where o2.ismark=0
					--and o2.tOrd<ord.tOrd --эта строка не верна. Но хочется получить макс. дату меньше, той что у путевки, в текущей строке
					and o2.ID_TECLST=o1.ID_TECLST)) child
		on ord.ID_TECLST=child.ID_TECLST



Вот так, по конкретной путевке работает.
declare @TECLST int =294,
		@dat	datetime ='20140706'

SELECT  ord.tOrd, ord.num,child.num
	FROM dbo.Ord ord
	left join (select num,ID_TECLST 
			FROM dbo.Ord o1
			where ismark=0
				and tOrd=(select max(o2.tOrd)
					from dbo.Ord o2
					where o2.ismark=0
					and o2.tOrd<@dat
					and o2.ID_TECLST=o1.ID_TECLST)
			) child
		on ord.ID_TECLST=child.ID_TECLST 
	where ord.id_ord=78637


Как в o2.tOrd<@dat вместо @dat получить данные из внешнего запроса?
7 авг 14, 14:11    [16411774]     Ответить | Цитировать Сообщить модератору
 Re: Найти предыдущую запись  [new]
Glory
Member

Откуда:
Сообщений: 104751
Изучить соединение с помощью APPLY
7 авг 14, 14:18    [16411833]     Ответить | Цитировать Сообщить модератору
 Re: Найти предыдущую запись  [new]
mrGuest
Guest
asdor,

Используйте cross/outer apply и ранжирующие функции
7 авг 14, 14:20    [16411857]     Ответить | Цитировать Сообщить модератору
 Re: Найти предыдущую запись  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4813
На SQL SERVER 2012 есть LAG
7 авг 14, 14:56    [16412101]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить