我有一个存储文章的表,例如:
文章表:
所以在页面上我有不同的部分,每个部分都有自己的categoryID。例如,体育是1,新闻是2等。
现在我想要从x个类别中加载最新文章。我有一个带有nvarchar的SP,其ID由空格分隔。
现在的问题是,如何从nvarchar中的类别中选择最新插入的文章?
我使用Erland Sommerskog的nvarchar-to-table将ID放入表格中http://www.sommarskog.se/arrays-in-sql-2005.html#iter-list-of-integers)
通常我会使用类似的东西来选择几个类别的文章:
SELECT TOP 5 ArticleID, Headline, CategoryID, ShortDescription, DatePublished
FROM Article
WHERE ArticleState = 3
AND CategoryID IN (SELECT i.number FROM iter_intlist_to_tbl(@Categories) AS i)
ORDER BY DatePublished DESC
但是,我如何只从所提供的每个类别中选择最后一篇文章?
答案 0 :(得分:3)
SELECT a.*
FROM iter_intlist_to_tbl(@Categories) i
OUTER APPLY
(
SELECT TOP 1 *
FROM Article
WHERE CategoryID = i.number
AND ArticleState = 3
ORDER BY
DatePublished DESC
) a
这将从每个类别中选择ArticleState = 3
的最新文章,或者如果某个类别中没有此类文章,则选择NULL
。
答案 1 :(得分:0)
我知道已经回答了这个问题,但是您可以对各种类别进行排名,只需使用 WHERE子句 对其进行OR过滤即可,例如WHERE rankA = 1 OR rankB = 1或rankc = 1
它将打印所有排名最高的文件,例如,我已在此查询中对薪金和成本进行排名并打印出
WITH RESULT AS
(
SELECT M.UserID
,M.FirstName
,M.LastName
,M.Salary
,Salary_Rank = DENSE_RANK() OVER(ORDER BY Salary DESC)
,M.Costs
,Costs_Rank = DENSE_RANK() OVER(ORDER BY Costs DESC)
FROM temp.dbo.MainData AS M
)
SELECT R.UserID
,R.FirstName
,R.LastName
,R.Salary
,R.Salary_Rank
,R.Costs
,R.Costs_Rank
FROM RESULT AS R
WHERE Salary_Rank = 1 OR Costs_Rank = 1
样本数据