2

datetime 열 '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이다

+0

당신이 MySQL의 테이블 구조를 제공 할 수 있습니까? –

+0

@VishalZanzrukia가 테이블 구조를 추가했습니다 – loganathan

+0

거기에 시간별 데이터를 가져올 수있는 updated_record_time (날짜) 필드가 있습니까? –

답변

1
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; 
+0

잘못된 대답을하고 있습니다 .. http://sqlfiddle.com/#!2/49a69/7 –

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

+0

같은 날 다른 연도를 기준으로 결과를 반환하지 않습니다. –

+0

답변을 수정했습니다. –

+0

응답을 복사하지 마십시오. P –