请教一下报表查询,怎么截取前N条分组后的结果。 返回
SqlSugar
沟通中
3
425
悬赏:0 飞吻
var queryableLeft = db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>(); //生成月份
//ReportableDateType.MonthsInLast1yea 表式近一年月份 并且queryable之后还能在where过滤
var queryableRight = db.Queryable<operateinfo>(); //声名表
//月份和表JOIN
var list=queryableLeft
.LeftJoin(queryableRight,(x1,x2)=>x2.operate_time.ToString("yyyy-MM")==x1.ColumnName.ToString("yyyy-MM"))
.GroupBy((x1,x2)=>x1.ColumnName)
.Select((x1, x2) => new {
//null的数据要为0所以不能用count
count = SqlFunc.AggregateSum(SqlFunc.IIF(x2.id > 0, 1, 0)),
date = x1.ColumnName.ToString("yyyy-MM")
}
).ToList();请问一下,分组查询后怎么取前N条数据,比如我只取分组后的前5条数据。
我在tolist前加了.Take(5)
....Take(5).ToList()
发现实际是先取前5条再统计,统计结果和预期不符合,请版主指导一下。
热忱回答(3)
-
fate sta VIP0
2025/8/21看文档分组:有rownumber用法
0 回复 -
fate sta VIP0
2025/8/213.2. 开窗函数语法实现(较多库支持)
新版本才支持 5.1.1
支持数据库:SqlServer、MySql8.0+、Oracle 、PgSql、达梦、金仓 等数据库支持
说明: partition by name 就等于 group by name
var test48 = db.Queryable<Order>().Select(it => new { index2 = SqlFunc.RowNumber(it.Id,it.Name),//order by id partition by name //多字段排序 order by id asc ,name desc //SqlFunc.RowNumber($"{it.Id} asc ,{it.Name} desc ",$"{it.Name}") price=it.Price, date=it.CreateTime }) .MergeTable()//将结果合并成一个表 .Where(it=>it.index2==1) //相同的name只取一条记录 //前20条用Where(it=>it.index2=<=20) .ToList(); //SELECT * FROM // (SELECT //row_number() over( partition by [Name] order by [Id]) AS [index2], //[Price] AS [price] , //[CreateTime] AS [date] FROM [Order] // ) MergeTable WHERE ( [index2] = 1 ) //多个字段 5.1.2-preview01 SqlFunc.RowNumber($"{it.Id} asc ,{it.Name} desc " , $"{it.Id},{it.Name}") //partition by [id],[Name] order by [Id] asc,[name] desc0 回复 -
PA VIP0
2025/8/21谢谢版本,我升级试试
0 回复