Это моя структура таблицы,

create table ArticleTbl
(
ArticleID bigint identity(1,1),
ProductID int ,
ArticleName varchar(100),
PubDate datetime,
AuthorName varchar(50),
AuthorImage bit,
HtmlValues nvarchar(max)
)

Здесь productid

1=creditcard,2=prepaidcard,3 saving account,.........

Каждый productid имеет несколько строк записей, я хочу выбрать последние 2 записи каждого productid за один раз, вместо того, чтобы каждый раз обращаться к базе данных.

Моя процедура сейчас похожа ..

create proc USP_GetArticle_ByProduct(@ProductID int) as 
select top(2) * from ArticleTbl where ProductID=@ProductID

Если я использую эту процедуру, каждый productid я должен перейти в базу данных...

Как получить один снимок всего продукта (последние 2 записи) с помощью запроса????

sql
1
thirumurugan 22 Июл 2009 в 14:53
2
Есть ли шанс исправить форматирование?
 – 
Kane
22 Июл 2009 в 14:56
Я также исправил заголовок: в теле было 2 строки, а в заголовке 3 строки.
 – 
gbn
22 Июл 2009 в 15:13

2 ответа

SELECT
    *
FROM
    (
    SELECT
        /*Random order per product*/
        ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY NEWID() ) AS Ranking,
        *
    FROM
        ArticleTbl
    ) foo
WHERE
   foo.Ranking <= 2
2
gbn 22 Июл 2009 в 15:09

Я полагаю, что это на сервере sql, да?

Если да, то вы могли бы сделать это...

select  a1.*
from Articletbl a1
where a1.articleid in
    (select top 2 a2.articleid 
    from ArticleTbl a2
    where a2.productid = a1.productid
    order by a2.articleid DESC)
order by a1.ProductID
0
MakkyNZ 22 Июл 2009 в 15:18