代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

如何为表中某列的给定值选择最多N条记录?

  •  3
  • Jake Petroules  · 技术社区  · 14 年前

    我有一个名为NewsArticles的表,其中包含列ID、LanguageID、日期、标题和文章内容。我想创建一个视图来选择 每个 数据库中的语言。

    例如,如果我有3种语言,比如英语、法语和德语,查询应该返回15条记录,其中包含5条最新的英语新闻文章,5条。。。你拍到照片了。如何构造这样的查询?

    为每个人 新闻文章中的唯一LanguageID,返回按日期降序排列的前5个记录。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Pavel Urbančík    14 年前

    CTE很简单。

    ;with x as 
    (
        select ID, LanguageID, Title, Date,
                row_number() over ( partition by LanguageID order by Date DESC  ) as position
        from NewsArticles
    )
    select * from x 
    where Position < 6
    
        2
  •  0
  •   Darryl Braaten    14 年前
    CREATE VIEW Top5Articles
    AS     
        SELECT top 5 * FROM LatestNews WHERE LanguageID = 1 order by createdontime desc // latest 5 English news articles
        union
        SELECT top 5 * FROM LatestNews WHERE LanguageID = 2 order by createdontime desc
        union
        SELECT top 5 * FROM LatestNews WHERE LanguageID = 3 order by createdontime desc
    

    假设您有一个created on time列,其中的文章是按时创建的。

    union将把所有选择返回到一个结果集中。

        3
  •  0
  •   pavanred    14 年前

    你想要这样的东西吗-

    select *
    from LatestNews
    where (
       select count(*) from LatestNews as A
       where A.LanguageID = LatestNews.LanguageID 
    ) <= 5 order by Date DESC;