[英]Mysql sql select table each 1 hour
我有这张桌子:
--------------------------------------------------------
|Date |type| |Value|
--------------------------------------------------------
|09/05/2022 00:03:04| |Water| |8.3|
--------------------------------------------------------
|09/05/2022 01:02:04| |Water| |3.3|
--------------------------------------------------------
|09/05/2022 02:13:04| |Water| |1.3|
--------------------------------------------------------
|09/05/2022 03:33:04| |Water| |3.3|
--------------------------------------------------------
|09/05/2022 04:43:04| |Water| |5.3|
--------------------------------------------------------
|09/05/2022 05:53:04| |Water| |6.3|
--------------------------------------------------------
|09/05/2022 06:22:04| |Water| |47.3|
--------------------------------------------------------
|09/05/2022 07:55:04| |Water| |48.3|
--------------------------------------------------------
|09/05/2022 08:03:14| |Water| |8.3|
--------------------------------------------------------
|09/05/2022 09:33:04| |Water| |9.3|
--------------------------------------------------------
我需要:
--------------------------------------------------------
|Date |type| |Value|
--------------------------------------------------------
|09/05/2022 00:00:00| |Water| |8.3|
--------------------------------------------------------
|09/05/2022 01:00:00| |Water| |3.3|
--------------------------------------------------------
|09/05/2022 02:00:00| |Water| |1.3|
--------------------------------------------------------
|09/05/2022 03:00:00| |Water| |3.3|
--------------------------------------------------------
|09/05/2022 04:00:00| |Water| |5.3|
--------------------------------------------------------
|09/05/2022 05:00:00| |Water| |6.3|
--------------------------------------------------------
|09/05/2022 06:00:00| |Water| |47.3|
--------------------------------------------------------
|09/05/2022 07:00:00| |Water| |48.3|
--------------------------------------------------------
|09/05/2022 08:00:00| |Water| |8.3|
--------------------------------------------------------
|09/05/2022 09:00:00| |Water| |9.3|
--------------------------------------------------------
|09/05/2022 10:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 11:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 12:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 13:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 14:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 15:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 16:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 17:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 18:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 19:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 20:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 21:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 22:00:00| |Water| | |
--------------------------------------------------------
|09/05/2022 23:00:00| |Water| | |
--------------------------------------------------------
可能吗?
我一天有一些数据......所以我需要知道从早上 0 点到下午 23 点我得到了哪些数据。 如果数据介于 2 小时之间,我需要在开始时拥有第一个数据。 例如,如果我在上午 00:05:00 获得数据,我需要将数据存储在 00:00:00。 因此,如果我有很多从 00:00:01 到 00:59:59 的数据,我只需要最后一个并在 00:00:00 显示它。 所以我需要一天中每个小时的最后数据。 我该如何处理 mysql SQL? Tks
您可以使用日期格式:
SELECT DATE_FORMAT(column_name, '%m/%d/%Y %H') as datee, type, value
from TABLE
group by datee, type, value
简要说明:
Recursive hours
,这得到 0 到 23 小时的范围yourdatetime
,这会从yourtable
中获取所有唯一日期,包括从 0 到 23 的时间output
,基本上yourtable
在 where 子句中添加了列 (row_number) 的表,仅包含一天中同一小时出现的最后一条数据WITH RECURSIVE hours AS (
SELECT 0 AS level
UNION ALL
SELECT level + 1 AS value
FROM hours
WHERE hours.level <= 22
),
yourdatetime AS (
SELECT date, level
FROM (SELECT DISTINCT LEFT(date,10) AS date FROM yourtable) tmp
CROSS JOIN hours
),
output AS (
SELECT
type, value,
DATE_FORMAT(STR_TO_DATE(date, '%m/%d/%Y %H:%i:%s'), '%m/%d/%Y %H:00:00') AS date,
ROW_NUMBER() OVER(PARTITION BY DATE_FORMAT(STR_TO_DATE(date, '%m/%d/%Y %H:%i:%s'), '%m/%d/%Y %H:00:00') ORDER BY date DESC) AS rn
FROM yourtable
)
SELECT
DATE_FORMAT(STR_TO_DATE(CONCAT(t1.date, level), '%m/%d/%Y%k'), '%m/%d/%Y %H:00:00') AS date,
COALESCE(t2.type, 'Water') AS type,
t2.value
FROM yourdatetime t1
LEFT JOIN output t2 ON DATE_FORMAT(STR_TO_DATE(CONCAT(t1.date, level), '%m/%d/%Y%k'), '%m/%d/%Y %H:00:00') = t2.date
WHERE rn = 1 OR rn IS NULL
ORDER BY DATE_FORMAT(STR_TO_DATE(CONCAT(t1.date, level), '%m/%d/%Y%k'), '%m/%d/%Y %H:00:00')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.