Sql server SQL Server 2008是否从多个表中选择前1行?
我有一个存储文章的表,例如: 条款表: ID类别ID文本日期 所以在页面上我有不同的部分,每个部分都有自己的分类。例如,体育是1,新闻是2等等 现在我想从x个类别加载最新的文章。我有一个SP,它接受一个nvarchar,ID由空格分隔 现在的问题是,如何从nvarchar中的类别中选择最新插入的文章 我使用Erland Sommerskog的nvarchar to表将ID放入表中 通常,我会使用类似的方法从几个类别中选择文章:Sql server SQL Server 2008是否从多个表中选择前1行?,sql-server,select,Sql Server,Select,我有一个存储文章的表,例如: 条款表: ID类别ID文本日期 所以在页面上我有不同的部分,每个部分都有自己的分类。例如,体育是1,新闻是2等等 现在我想从x个类别加载最新的文章。我有一个SP,它接受一个nvarchar,ID由空格分隔 现在的问题是,如何从nvarchar中的类别中选择最新插入的文章 我使用Erland Sommerskog的nvarchar to表将ID放入表中 通常,我会使用类似的方法从几个类别中选择文章: SELECT TOP 5 ArticleID, Headline,
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
但是,我如何仅从提供的每个类别中选择最后一篇文章呢
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。我知道这个问题已经得到了回答,但您可以对各种类别进行排序,只需使用WHERE子句对它们进行筛选,例如rankA=1或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
样本数据