问一个freesql问题

古耕 安徽游艺道网络科技有限公司 其他  2021-05-11 09:32:21
场景:
有个反应天气的表temperature_peak,里面有每年12个月每天的天气情况,每天一行数据,现在要得出每年天气质量最大的那个数据,并获取那个数据对应的时间

在数据库里直接查询的语句我是这么写的,结果是正确的:
select a.max_qty,a.max_qty_time from temperature_peak a inner join (SELECT max_qty_time,max(max_qty) max_qty
FROM temperature_peak
GROUP BY DATE_FORMAT(max_qty_time,'%Y')
ORDER BY max_qty_time asc) b on DATE_FORMAT(a.max_qty_time,'%Y')= DATE_FORMAT(b.max_qty_time,'%Y')
and a.max_qty=b.max_qty

结果是这样的:
Qty Time
...
38.2 2019-08-01 12:06:00
38.2 2020-08-17 15:22:00
26.8 2021-02-22 13:27:00


在freesql里怎么写,目前我是这么写的
var list = _repo.Orm.Select<TemperaturePeak>().NoTracking().OrderByDescending(p => p.Time).GroupBy(p => p.Time.Value.Year).ToList(p => new HistoryPeakResponse { Value = p.Max(p.Value.Qty), Time = p.Value.Time });

但是结果不对,分完组后结果是这样的(分完组后虽然Qty的结果是对的,但是时间却取了每年的头一天):
Qty Time
...
38.2 2019-01-01 12:06:00
38.2 2020-01-01 15:22:00
26.8 2021-01-01 13:27:00

刚写freesql,不太理解怎么写,烦请赐教,最好能直接给代码

...全文
66 点赞 收藏 2
写回复
2 条回复
wangsl_wsl 05月11日
var list2 = await _repo.Orm.Select<TemperaturePeak> .GroupBy(item=>item.CreateTime.Year) .ToListAsync(p=> new { Qty = p.Max(p.Value.EntityId), Year = p.Key }); var result = new List<TemperaturePeak>(); foreach (var rep in list2) { var item = await _repo.Orm.Select<TemperaturePeak> .Where(e => e.Qty == rep.Qty && e.Time.Year == rep.Year) .ToOneAsync(); result.Add(new TemperaturePeak { Qty = item.EntityId, Time = item.CreateTime }); } result 就是你的结果
回复 点赞
wangsl_wsl 05月11日
分两步查询 第一步拿到Qty , 然后通过 Qty 加 年二次查询,数据拼接就可以实现了.
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告