如何选择一天中每小时的最新记录

我想根据日期时间列’reading_on’选择给定日期中每小时的最新记录。 我执行了以下查询

hourly_max = InverterReading .where("DATE(reading_on) = ? AND imei = ?", Date.today, "770000000000126") .group("HOUR(reading_on)") .having("max(HOUR(reading_on))") hourly_max.group_by(&:id).each { |k,v| puts v.last.reading_on } 

在上面的查询中,我没有得到所需的结果。 选择一天中每小时最新记录的正确方法是什么。 下面是表格结构

在此处输入图像描述

 SELECT HOUR(a.reading_on) As hr, max(a.id),a.reading_on FROM InverterReadings a LEFT JOIN InverterReadings b ON YEAR(a.reading_on)=YEAR(b.reading_on) AND MONTH(a.reading_on)=MONTH(b.reading_on) AND day(a.reading_on)=day(b.reading_on) AND hour(a.reading_on)=hour(b.reading_on) AND a.reading_on < b.reading_on WHERE b.reading_on is null group by a.reading_on; 

演示: http : //sqlfiddle.com/#!2/49a69/14

 SELECT HOUR(a.reading_on) As hr, max(a.id),a.reading_on, date_format(a.reading_on,'%j-%Y-%k') FROM InverterReadings a LEFT JOIN InverterReadings b ON date_format(a.reading_on,'%j-%Y-%k') = date_format(b.reading_on,'%j-%Y-%k') AND a.reading_on < b.reading_on WHERE b.reading_on is null group by a.reading_on;