sql如何取group by 分组的多条记录只取最上面的一条!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何取group by 分组的多条记录只取最上面的一条!相关的知识,希望对你有一定的参考价值。

例如:表table
userid ranking username
001 C aa
001 B bb
002 A cc
如何取得:001 C aa
002 A cc
求解~~~

1、创建测试表,create table test_order(userid varchar2(20), ranking varchar2(20), username varchar2(20));

2、插入样例数据,

insert into test_order values('001','C','aa');

insert into test_order values('001','B','bb');

insert into test_order values('002','A','cc');

3、查询表中所有记录,select t.*, rowid from test_order t;

4、编写sql,获取所需记录,

select *

  from (select t.*,

               row_number() over(partition by userid order by ranking desc) rn

          from test_order t)

 where rn = 1

参考技术A select userid,ranking,username from table
where userid+ranking in
(
select userid+max(ranking) from table
group by userid
)追问

不需要取max只取第一条,数据库是SQL Server要怎么做啊?

追答

是SQL2005以上的吗?语句:
select userid,ranking,username from
(
select userid,ranking,username,ROW_NUMBER() OVER(PARTITION BY userid ORDER BY userid DESC) as num
from table
) t
where t.num = 1

本回答被提问者采纳

Linq to sql 按多条记录分组

【中文标题】Linq to sql 按多条记录分组【英文标题】:Linq to sql group by a number of records 【发布时间】:2011-11-16 15:05:07 【问题描述】:

有没有办法创建一个 linq to sql 查询以按 Take 参数分组?

例如,如果我有一个包含 20 条记录的表,其中一个唯一 ID 值从 1 到 20,我想获得一组按 5 条记录分组的记录:

Group 1: 1,2,3,4,5
Group 2: 6,7,8,9,10
....

我可以想到两种方法来做到这一点

通过 5 次查询: 计算总记录的第一个查询,接下来的 4 个查询将是我跳过 5 并取 5 的选择查询。

通过进行一次查询,使用内部索引循环遍历结果并使用 5 个组创建对象

有没有更优雅的方法来使用 linq to sql 做到这一点?

【问题讨论】:

我会在表中添加一个“groupId”字段并在 group by 子句中使用该字段 orderBy 可能并不总是相同的,所以在不同的情况下,item 可以有不同的组 简短的回答是 linq 没有内置任何东西,除了跳过/获取。这是用于分页表吗?只是想知道为什么您需要一口气获得所有组。我通常会先计数,然后在用户翻阅页面时跳过/拍摄。 我在一个站点中有一个菜单,其中一个级别中有太多菜单项导致设计任性,因此作为一种解决方案,我计划将一个级别的项目分组为 10 个或节省垂直空间的东西。我知道我可以采用其中一种解决方案,但我想知道是否有一种更短、更优雅的方法(我记得 Rails 对同样的问题有一个非常优雅的解决方案) 【参考方案1】:

你的第二个想法正是我会做的。只需从数据库中获取所有内容并在 .NET 端循环。可能有一些方法可以使用 Aggregate 以更类似于 LINQ 的方式进行操作,但我相信它们会更难阅读。如果您以惰性方式执行此操作(使用 yield 来实现枚举器),您仍将只循环一次序列,因此您不会失去性能。

【讨论】:

【参考方案2】:

如果您最终还是要从数据库中检索所有记录,为什么不直接执行它,然后使用这样的方法:

collection.GroupBy(x => collection.IndexOf(x) / 5);

【讨论】:

我用我能想到的最简单的数据做了一个例子,实际的表没有1到20的值 collection.GroupBy(x => collection.IndexOf(x) / 5);【参考方案3】:

你可以这样分组吗

var items = from i in arr
                let m = i / 5
                group i by m into d
                select new  d ;

如果你有 10 个元素,它将创建两组,每组 5 个

【讨论】:

【参考方案4】:

按原样提取数据,将其提供给容器然后将它们拆分。

您的查询永远不应该,永远了解有关他们提取的数据如何显示给用户的任何事情。

【讨论】:

以上是关于sql如何取group by 分组的多条记录只取最上面的一条!的主要内容,如果未能解决你的问题,请参考以下文章

sql:用group by分组后,每组随意取一个记录?

sql中group by 是啥意思啊?请教谢谢

mysql使用GROUP BY分组实现取前N条记录的方法

SQL id和no相同的有多条记录时,只取其中的一条,要怎么写查询语句

sql语言 怎么求每组最大,就是用group by 分组后,求每组某列最大?

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?