猿问

为每个类别选择前10条记录

为每个类别选择前10条记录

我想在一个查询中从每个部分返回前10条记录。有人能帮上忙吗?节是表中的列之一。

数据库是SQLServer 2005。我想按输入日期返回前十名。部门是业务,本地和特色。对于某一特定日期,我只需要顶部(10)业务行(最近的条目)、顶部(10)本地行和顶部(10)功能。


梵蒂冈之花
浏览 843回答 3
3回答

一只甜甜圈

如果您正在使用SQL 2005,您可以这样做.SELECT&nbsp;rs.Field1,rs.Field2&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;Field1,Field2,&nbsp;Rank()&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;over&nbsp;(Partition&nbsp;BY&nbsp;Section&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;RankCriteria&nbsp;DESC&nbsp;)&nbsp;AS&nbsp;Rank&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;table &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;rs&nbsp;WHERE&nbsp;Rank&nbsp;<=&nbsp;10如果你的RankCriteria有领带,那么你可能会返回超过10行,马特的解决方案可能对你更好。

慕少森

在T-SQL中,我会这样做:WITH&nbsp;TOPTEN&nbsp;AS&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;*,&nbsp;ROW_NUMBER()&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;over&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PARTITION&nbsp;BY&nbsp;[group_by_field]&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;[prioritise_field] &nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;AS&nbsp;RowNo&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;[table_name])SELECT&nbsp;*&nbsp;FROM&nbsp;TOPTEN&nbsp;WHERE&nbsp;RowNo&nbsp;<=&nbsp;10

Qyouu

这适用于SQLServer 2005(编辑以反映您的澄清):select&nbsp;*from&nbsp;Things&nbsp;twhere&nbsp;t.ThingID&nbsp;in&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;top&nbsp;10&nbsp;ThingID&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;Things&nbsp;tt&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;tt.Section&nbsp;=&nbsp;t.Section&nbsp;and&nbsp;tt.ThingDate&nbsp;=&nbsp;@Date&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;tt.DateEntered&nbsp;desc &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;t.ThingDate&nbsp;=&nbsp;@Dateorder&nbsp;by&nbsp;Section,&nbsp;DateEntered&nbsp;desc
随时随地看视频慕课网APP
我要回答