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

Откуда:
Сообщений: 57
Есть таблица хранящая по объектно историю изменений значений. Нужно получить эту историю за период + получить показания на начало этого периода и дату, когда этот значение было установлено:

'DateBegin' и 'DateEnd' - собственно интервал.
Вот нерабочий запрос:

SELECT
        A.ID,
	A.CurrDate,
	A.Value,
	(SELECT top 1 B.Date, B.value
		FROM TableName as B
		WHERE
                        B.ID = A.ID
			and B.Date < 'DateBegin'
		ORDER BY B.Date
	)
FROM
        TableName as A
WHERE
        A.Date between 'DateBegin' and 'DateEnd'
ORDER BY A.ID

А вот рабочий, но он возвращает только что-то одно или дату или значение (этот понятно - дату):
SELECT
        A.ID,
	A.CurrDate,
	A.Value,
	(SELECT top 1 B.Date
		FROM TableName as B
		WHERE
                        B.ID = A.ID
			and B.Date < 'DateBegin'
		ORDER BY B.Date
	)
FROM
        TableName as A
WHERE
        A.Date between 'DateBegin' and 'DateEnd'
ORDER BY A.ID

Можно ли как-то использовать вложенный в этом месте запрос с несколькими столбцами? Или это вообще тупняк и решается по другому.
28 сен 11, 15:50    [11349227]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос в SELECT с более чем одним столбцом  [new]
Glory
Member

Откуда:
Сообщений: 104751
PZH
Можно ли как-то использовать вложенный в этом месте запрос с несколькими столбцами? Или это вообще тупняк и решается по другому.

нельзя
по другому
28 сен 11, 15:51    [11349235]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос в SELECT с более чем одним столбцом  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
PZH,

именно в этом месте нет, но если версия сервера позволяет, смотрите outer apply. будет что-то вроде такого
SELECT
    A.ID,
	A.CurrDate,
	A.Value,
	a1.Date,
	a1.Value
FROM
        TableName as A
        outer apply (
			SELECT top 1 B.Date, B.Value FROM TableName as B WHERE B.ID = A.ID and B.Date < 'DateBegin' ORDER BY B.Date
		) a1
WHERE
        A.Date between 'DateBegin' and 'DateEnd'
ORDER BY A.ID
28 сен 11, 16:02    [11349340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить