mariadb mysql按小时分组-如何避免错误的结果

0h4hbjxa  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(188)

正确的总数是0.9在原始数据中,您可以看到在17:01时,该值被设置为1161.5。

通过sql查询,原始数据按小时分组。结果中仅显示了16-17点的0.6降雨量。不幸的是,计数器1161.5和1161.2之间的0.3毫米缺失。
你知道我怎样才能避免我的sql查询中的错误吗?

*原始数据来自雨量计数器:

| 标识符|单一文本|日期|雨|
| - -|- -|- -|- -|
| 小行星15261|小行星166627| 2022年10月20日15时02分07秒|小行星1160.6|
| 小行星15262|小行星166627| 2022年10月20日15时12分07秒|小行星1160.6|
| 小行星15263|小行星1666272127| 2022年10月20日15时22分07秒|小行星1160.6|
| 小行星15264|小行星166627| 2022年10月20日15时32分07秒|小行星1160.6|
| 小行星15265|小行星166627| 2022年10月20日15时42分07秒|小行星1160.6|
| 小行星15266|小行星166627| 2022年10月20日15时52分07秒|小行星1160.6|
| 小行星15267|小行星16662| 2022年10月20日16时02分07秒|小行星1160.6|
| 小行星15268|小行星16662| 2022年10月20日16时12分07秒|小行星1160.6|
| 小行星15269|小行星16662| 2022年10月20日16时22分07秒|小行星1160.6|
| 小行星15270|小行星16662| 2022年10月20日16时29分31秒|小行星1160.9|
| 小行星15271|小行星16662| 2022年10月20日16时30分28秒|小行星1160.9|
| 小行星15272|小行星16662| 2022年10月20日16时32分07秒|小行星1160.9|
| 小行星15273|小行星16662| 2022年10月20日16时42分07秒|小行星1160.9|
| 小行星15274|小行星16662| 2022年10月20日16时49分08秒|小行星1161.2|
| 小行星15275|小行星16662| 2022年10月20日16时52分07秒|一千一百六十一点二|
| 小行星15276|小行星1666278118| 2022年10月20日17时01分58秒|一千一百六十一点五|
| 小行星15277|小行星1666| 2022年10月20日17时02分07秒|小行星1161|
| 小行星15278|小行星166627| 2022年10月20日17时12分07秒|小行星1161|
| 小行星15279|小行星16662| 2022年10月20日17时22分07秒|小行星1161|
| 小行星15280|小行星166627| 2022年10月20日17时32分07秒|小行星1161|

*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分|一千一百六十一点二|
|2022年10月20日17时01分58秒|0.00美元| 一千一百六十一点五|
| 2022年10月20日18时02分07秒|0.00分|小行星1161|

col17t5w

col17t5w1#

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

***编辑:***添加了演示并更正了排印错误和整数除法。

演示:https://dbfiddle.uk/fW1ykZxi

相关问题