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

Откуда: Новосибирск
Сообщений: 683
Добый всем день. Не знаю как точно назвать тему, так что вот, помогите пожалуйста, уже 2 дня борюсь.
вот такая задачка.
Есть таблица А, в ней идут "ГЛАВНЫЕ" записи... например темы форумов. Есть табличка Б, в ней ответы на каждую запись из тем "форума" соответственно. Необходимо вытащить все записи из таблицы А, но вместе с этим нада вытащить одну последнюю запись, которая ссылается на таблицу А из Б. Если на примере форума, то последнее сообщение.


Вот были попытки сделать такой запрос. Есть один огромный запрос, в котором все работает, но вот немного сократил

SELECT * FROM Funnys 
where ID_Funny = 
(SELECT top 1 a.ID_Funny FROM [dbo].[Answers] a 
	inner join aspnet_Users u on (u.UserId = a.UserId) 
					order by a.[DateAnswer] desc)


Выходит одна запись "правильная", но у меня дохрена записей в таблице Funnys
13 май 09, 12:18    [7173962]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Khusainov_Heckfy
Member

Откуда: Новосибирск
Сообщений: 683
А в большом запросе выводятся все записи но там NULL из подтаблицы Б кроме первой.
13 май 09, 12:19    [7173974]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Khusainov_Heckfy
А в большом запросе выводятся все записи но там NULL из подтаблицы Б кроме первой.

Версию сервера опубликуйте
13 май 09, 12:21    [7173987]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Khusainov_Heckfy
Member

Откуда: Новосибирск
Сообщений: 683
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
13 май 09, 12:36    [7174078]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Добрый Э - Эх
Guest
Select top 1 with ties *
  from ...
  join ...
    on ...
 order by row_number() over(partition by ... order by ...)
Подробности или в поиске по форуму или в BOL-е
13 май 09, 12:44    [7174138]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Самое очевидное решение -
кореллированный подзапрос в списке полей SELECTа FROM А
для вычисления последней записи Б
IMHO
13 май 09, 12:47    [7174174]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Типа такого:
SELECT A.*,
 (SELECT TOP 1 B.F FROM B WHERE B.ID_A=A.ID ORDER BY B.[Date] DESC) [B.F]
FROM A
WHERE ...
13 май 09, 12:50    [7174211]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Khusainov_Heckfy
Member

Откуда: Новосибирск
Сообщений: 683
)) спасибо! Первый вариант заработал!
13 май 09, 13:15    [7174479]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
Khusainov_Heckfy
Member

Откуда: Новосибирск
Сообщений: 683
Чтобы тему не создавать заново, решил спросить тут. Вопрос тот же самый! ТОлько СУБД уже ACCESS 2003

запрос

select s1.ID_client , s2.ID_Client_Pay from 
(select ID_Client from Clients) s1
left outer join (select TOP 1 ID_Client_Pay, ID_Client from ClientPay) s2 on (s1.ID_client = s2.ID_client)

Естесственно в запросе s2 впринципе вывелась одна строка :( как в этой СУБД сделать так же?
18 июн 09, 10:30    [7314045]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить записи из таблицы, и припоять к этому еще последнюю запись из другой таблицы  [new]
iljy
Guest
Khusainov_Heckfy,

1. использовать top без order by - порочная практика, ибо никаких гарантий что именно вернет вам сервер - нет.
2. пример - присоединение последней по дате записи:
select s1.ID_client , s2.ID_Client_Pay from 
(select ID_Client, max(Date) as date from ClientPay) s1
join ClientPay s2 on (s1.ID_client = s2.ID_client and s1.Date = s2.Date)
18 июн 09, 10:55    [7314182]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить