programing

mysql group by hour - 잘못된 결과를 피하는 방법

muds 2023. 8. 9. 21:06
반응형

mysql group by hour - 잘못된 결과를 피하는 방법

이 표에는 레인 카운터 값이 저장되어 있습니다.정확한 합계는 0.9 RAW 데이터에서 17:01에 값이 1161.5로 설정된 것을 확인할 수 있습니다.

SQL 쿼리를 통해 RAW 데이터는 시간당 그룹화됩니다.결과적으로 16-17시 사이에는 0.6개의 비만 보입니다.안타깝게도 카운터 1161.5와 1161.2 사이의 0.3mm가 누락되었습니다.

어떻게 하면 제 SQL 쿼리의 오류를 피할 수 있는지 아십니까?

  • 레인 카운터의 RAW 데이터:
이드 언익스택 날짜. 우천의
15261 1666270927 2022-10-20 15:02:07 1160.6
15262 1666271527 2022-10-20 15:12:07 1160.6
15263 1666272127 2022-10-20 15:22:07 1160.6
15264 1666272727 2022-10-20 15:32:07 1160.6
15265 1666273327 2022-10-20 15:42:07 1160.6
15266 1666273927 2022-10-20 15:52:07 1160.6
15267 1666274527 2022-10-20 16:02:07 1160.6
15268 1666275127 2022-10-20 16:12:07 1160.6
15269 1666275727 2022-10-20 16:22:07 1160.6
15270 1666276171 2022-10-20 16:29:31 1160.9
15271 1666276228 2022-10-20 16:30:28 1160.9
15272 1666276327 2022-10-20 16:32:07 1160.9
15273 1666276927 2022-10-20 16:42:07 1160.9
15274 1666277348 2022-10-20 16:49:08 1161.2
15275 1666277527 2022-10-20 16:52:07 1161.2
15276 1666278118 2022-10-20 17:01:58 1161.5
15277 1666278127 2022-10-20 17:02:07 1161.5
15278 1666278727 2022-10-20 17:12:07 1161.5
15279 1666279327 2022-10-20 17:22:07 1161.5
15280 1666279927 2022-10-20 17:32:07 1161.5
  • MYSQL 쿼리:
SELECT `date`,ROUND(MAX(`rainc`) - MIN(`rainc`),2) AS `rain`, MAX(`rainc`) AS max
FROM`mqtt-weather`.`rainc`
WHERE `date` >= CURDATE() AND `date` < CURDATE() + INTERVAL 1 DAY
GROUP BY HOUR(`date`)
    
  • 결과:
날짜. 비. 맥스.
2022-10-20 15:02:07 0.00 1160.6
2022-10-20 16:02:07 0.60 1161.2
2022-10-20 17:01:58 0.00 1161.5
2022-10-20 18:02:07 0.00 1161.5
WITH
  lagged AS
(
  SELECT
    r.*,
    LAG(`date`) OVER (ORDER BY unixt) AS prev_date,
    rainc - LAG(rainc) OVER (ORDER BY unixt) AS rainc_delta
  FROM
    `mqtt-weather`.`rainc` AS r
)
SELECT
  MIN(prev_date)     AS interval_start,
  MAX(`date`)        AS interval_end,
  SUM(rainc_delta)   AS interval_rain,
  MAX(rainc)         AS final_rainc
FROM
  lagged
GROUP BY
  unixt DIV 3600

EDIT: 데모를 추가하고 오타 및 정수 나눗셈을 수정했습니다.

데모: https://dbfiddle.uk/fW1ykZxi

언급URL : https://stackoverflow.com/questions/74144232/mysql-group-by-hour-how-to-avoid-wrong-results

반응형