请教一下报表查询,怎么截取前N条分组后的结果。 返回

SqlSugar 沟通中
3 425
该叫什么 PA 发布于2025/8/21
悬赏: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 fate sta VIP0
    2025/8/21

    看文档分组:有rownumber用法

    0 回复
  • fate sta fate sta VIP0
    2025/8/21

    3.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] desc


    0 回复
  • PA PA VIP0
    2025/8/21

    谢谢版本,我升级试试

    0 回复