mysql - 如何选取一天中每小时的最新记录

标签 mysql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 rails-activerecord

我想根据日期时间列“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 }

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

enter image description here

最佳答案

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

关于mysql - 如何选取一天中每小时的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23707871/

相关文章:

ruby-on-rails-3 - Capybara:无法找到带有js的表单字段:true

mysql - 会首先执行括号内的所有内容吗?

mysql - MYSQL 搜索条件的微小差异会造成巨大差异,我无法理解它

php - PHP和MySQL的时差

ruby-on-rails - Rails、Webpacker 和 Docker:无法分配请求的地址 - connect(2) for [::1]:3035

mysql - ExtJS Store - 将特定字段复制到存储

mysql - 在生产数据库上创建索引 MySQL 5.6.13

ruby-on-rails - 确定 ruby​​ 循环中的 json 键/值何时需要逗号?

mysql - 如果我截断一个表,我是否也应该添加索引

ruby-on-rails - 我可以更改不同操作所需的验证规则吗?