[英]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.