DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.33k stars 1.33k forks source link

分表之后的报表查询问题 #1286

Closed aaa930811 closed 1 month ago

aaa930811 commented 1 month ago

image 文档中写了没分表的情况,但是如果我想要获取最新的一张表的报表不知道该这么写,我尝试了一下报错

    List<DateTime> dts = GetTimeIntervals(startTime, endTime, intervalMinutes);
    var result = _dbClient.Reportable(dts)
                    .ToQueryable<DateTime>()
                    .SplitTable(t => t.Take(1))
                    .LeftJoin<AccessLogSplitEntity>((it, o) => o.CreateTime >= it.ColumnName && o.CreateTime <= it.ColumnName.AddMinutes(intervalMinutes))
                    .GroupBy(it => it.ColumnName)
                    .Select((it, o) => new
                    {
                        Time = it.ColumnName,
                        Count = SqlFunc.AggregateCount(o.Id)
                    }).ToList();
aaa930811 commented 1 month ago

这个SplitTable(t => t.Take(1))该写在哪个地方?

DotNetNext commented 1 month ago

var queryable2=xxxxxSplitTable(t => t.Take(1)); Leftjoin(queryable2,xxxxx=yyyy)

aaa930811 commented 1 month ago

image

     public List<AccessRealtimeCount> GetTodayMinuteAccessCount()
     {
         DateTime startTime = DateTime.Today;  // 今天的零点时间
         DateTime endTime = DateTime.Now;      // 当前时间
         int intervalMinutes = 5;

         List<DateTime> dts = GetTimeIntervals(startTime, endTime, intervalMinutes);

         var q2 = _dbClient.Queryable<AccessLogSplitEntity>().SplitTable(tb => tb.Take(1));
         var result = _dbClient.Reportable(dts).ToQueryable<DateTime>()
                         .LeftJoin<AccessLogSplitEntity>((it, q2) => q2.CreateTime >= it.ColumnName && q2.CreateTime <= it.ColumnName.AddMinutes(intervalMinutes))
                         .GroupBy(it => it.ColumnName)
                         .Select((it, q2) => new
                         {
                             Time = it.ColumnName,
                             Count = SqlFunc.AggregateCount(q2.Id)
                         }).ToList();

         return result.Select(x => new AccessRealtimeCount
         {
             Time = x.Time.ToString("yyyy-MM-dd HH:mm:ss"),
             Count = x.Count
         }).ToList();
     }

还是报错

aaa930811 commented 1 month ago

谢谢,已解决