mysql mysql Workbeach創建存儲過程

MySql創建存儲過程, 以給定時間間隔對數據抽樣, Spring 中對數據庫按時間間隔抽樣

在MySql WorkBeach中創建存儲過程

  1. 打開workbeach, 打開要創建存儲過程的數據庫.
  2. 在數據庫下方右擊Stored Procedures, 在彈出的菜單中選擇Create Stored Procedure…, 如圖在這裏插入圖片描述
  3. 在彈出的new_procedure-Routine窗口中輸入創建存儲過程的代碼.
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_intervalHistory`(deviceId LONG, IN timeBegin DATETIME, IN timeEnd DATETIME, IN timeInterval INT)
BEGIN
       SET @time := '1000-01-01 00:00:00';
       SET @interval := timeInterval;
       SELECT * FROM device_value_history
       WHERE device_id=deviceId AND time >= timeBegin AND time <= timeEnd
       AND TIMESTAMPDIFF( SECOND, @time, time ) >= @interval
       AND @time := time;
END

其中 DEFINER=`root`@`localhost` 爲自動生成的可以不寫.
proc_intervalHistory爲存儲過程的名稱, 調用時使用此名稱, 相當於函數名,其中有三個參數, 以IN timeBegin DATETIME爲例, IN表示輸入參數, 可以省略, OUT爲輸出參數, DATETIME爲參數類型, 此處表示時間, timeBegin爲參數名.
這個函數的作用是查詢device_value_history表中的, device_id爲deviceId的, 並且time在timeBegin和timeEnd之間的, 並且兩條數據的時間間隔>=interval的所有數據, 即以interval爲時間間隔抽樣.
AND @time := time是關鍵, 表示查詢完一條紀錄後, 將這次查詢到的數據的time賦值給@time, 用於給下一個查詢做比較.
如圖在這裏插入圖片描述

  1. 點擊apple按鈕, 生成存儲過程文件, 在Stored Procedures選項上右擊, 選擇refresh all菜單, 刷新即可看到創建的文件.
  2. 測試, 新建或在原來Query頁面中輸入調用語句, call proc_intervalHistory(19, '2018-12-01 00:00', '2018-12-20 00:00', 1); 點擊工具欄執行按鈕(閃電圖表⚡), 查看執行結果, 如圖在這裏插入圖片描述
  3. 在spring中調用, 只需在JpaRepository的實現接口中使用@Query註解即可, 代碼如
@Query(value="call proc_intervalHistory(:deviceId, :startTime, :endTime, :interval)", nativeQuery = true)
List<DeviceValueHistory> findByStartTimeAndEndTimeAndDeviceIdInterval(@Param("deviceId") long deviceId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("interval") int interval);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章