Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008是否从多个表中选择前1行?_Sql Server_Select - Fatal编程技术网

Sql server SQL Server 2008是否从多个表中选择前1行?

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,

我有一个存储文章的表,例如:

条款表:

ID类别ID文本日期 所以在页面上我有不同的部分,每个部分都有自己的分类。例如,体育是1,新闻是2等等

现在我想从x个类别加载最新的文章。我有一个SP,它接受一个nvarchar,ID由空格分隔

现在的问题是,如何从nvarchar中的类别中选择最新插入的文章

我使用Erland Sommerskog的nvarchar to表将ID放入表中

通常,我会使用类似的方法从几个类别中选择文章:

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
样本数据