請問
mysql如何捉取某一天每五分鐘數據的最大值最小值逐筆列出
例:
日期 值
2019-12-13 14:01 10
2019-12-13 14:02 11
2019-12-13 14:03 12
2019-12-13 14:04 13
2019-12-13 14:05 14
2019-12-13 14:06 12
2019-12-13 14:07 14
2019-12-13 14:08 14
2019-12-13 14:09 14
2019-12-13 14:10 20
例如:
最大值 最小值
2019-12-13 14:05 14 2019-12-13 14:01 10
2019-12-13 14:10 20 2019-12-13 14:06 12
14:05 是取 14:05:00~14:05:59
其實,給你一個想法。這東西我以前就做過。有點懶的寫。就告訴你觀念好了。
將你的實際日期先轉成unixtime。
1.然後再將其數值round(unixtime/300)。
這樣你就可以得到每5分的同樣key值了。
2.依上面的資料做為子查尋後。再依新生成的值當key來做group。就可以得到每5分的最大最小值了。
我懶的寫,有寫要幫我補的拿去用。原理就只是這樣。
ps:如果要微調算00~59。可以在生成的unixtime-1。就行了
有嘗試使用
SELECT UpdateDate,MAX(price),MIN(price) FROM date
where DATE_FORMAT(UpdateDate,'%i')%5 = 0 AND DateTime
= '2019-09-26' group by UpdateDate
但跑出來的結果
你要做成子查尋分開處理
而且你取餘數也不對吧。
算了,你等我一下。我寫一份給你
來吧
SELECT
FROM_UNIXTIME(unixtime*300,'%Y-%m-%d %H:%i:%s') AS stime,
FROM_UNIXTIME(unixtime*300+299,'%Y-%m-%d %H:%i:%s') AS etime,
max(price),
min(price) FROM
(
SELECT floor(UNIX_TIMESTAMP(UpdateDate)/300) AS unixtime,price FROM `date`
) AS d GROUP BY unixtime
原理因該不用我解釋吧。反正就是將每5分內的資料,統統化成同一個key就行了。所以採用了unixtime的特性。直接除於5分(300)的值。
產生的整數值就是固定的key了。
將其做為子查尋。再交由另外一個處理還原回來基本值再依其對應key來取最大最小值。
就解決了。
寫成這樣還不懂原理的話。我就沒辦法了。
喔喔
看懂了,感謝你~~
請問如果要這裡面加上取出資料第一筆和最後一筆要如何操作?
依時間排序的第一筆跟最後一筆嘛??
五分鐘內的第一筆跟最後一筆
SELECT unixtime,SUBSTRING_INDEX(moneys,',',1) AS mtop,SUBSTRING_INDEX(moneys,',',-1) AS mfoot FROM (
SELECT unixtime,GROUP_CONCAT(money ORDER BY created_at) AS moneys FROM (
SELECT *,floor(UNIX_TIMESTAMP(created_at)/300) AS unixtime FROM pay_orders
) AS tt GROUP BY unixtime
) AS dd
原理說明,由於沒有直接能取第一筆及最後一筆的函數。
所以我是採用了GROUP_CONCAT的特性後。再將其第一跟最後分離出來。
我就告訴你這樣了。其它自已去組合吧。我就不幫你組合了。
告訴你這些已經違背我的意思了。