在单个表中选择每个产品ID的最新2条记录

时间:2009-07-22 10:53:53

标签: sql

这是我的表结构,

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条记录,而不是每次都去数据库。

我的程序现在就像..

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

如果我使用这个程序,每个productid我必须去数据库...

如何使用查询????

获取所有产品(最新2条记录)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为这是在sql server上的,是吗?

如果是这样,你可以这样做......

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