2009-07-22 3 views
1

das ist meine Tabellenstruktur,spätestens 2 Aufzeichnungen jedes Produkt-ID in einzelnen Tabelle wählen

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

hier productid sind

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

jeder productid ist mit mehreren Reihen von Datensätzen, i zu wollen Wählen Sie die letzten 2 Datensätze jeder Produkt-ID in einer Aufnahme, anstatt jedes Mal zur Datenbank zu gehen.

mein Verfahren jetzt ist wie ..

create proc USP_GetArticle_ByProduct(@ProductID int) as 
select top(2) * from ArticleTbl where [email protected] 

, wenn ich dieses Verfahren verwenden, jeden productid i Datenbank gehen ...

wie einen Schuss alle Produkte (spätestens 2 Datensätze) zu erhalten Abfrage verwenden ????

+2

Jede Chance, die Formatierung beheben können? – Kane

+0

Ich reparierte auch den Titel: es sagte 2 Reihen im Körper aber 3 Reihen im Titel – gbn

Antwort

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 
0

ich glaube das ist auf sql server yeah?

wenn ja, können Sie dies tun ...

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 
Verwandte Themen