问一个freesql问题
场景:
有个反应天气的表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,不太理解怎么写,烦请赐教,最好能直接给代码