【问题标题】:How to select the latest record of each hour in a day如何选择一天中每个小时的最新记录
【发布时间】:2014-05-17 05:19:24
【问题描述】:

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

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

【问题讨论】:

  • 能否提供MySql的表结构?
  • @VishalZanzrukia 添加了表结构
  • 是否有updated_record_time(日期)字段,我们可以通过它获取每小时数据?
  • @VishalZanzrukia 不,我只有 reading_on 列,我需要根据它获取记录。

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


【解决方案1】:
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

【讨论】:

  • 它不会返回基于不同年份相同日期的结果。
  • 不要复制答案:P
  • 我没有复制。你没用过group by,我修改了。
【解决方案2】:
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;

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 2015-06-05
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多