Sql語句實現不同記錄同一屬性列的差值計算
所使用的表的具體結構如下圖所示
Table中主鍵是(plateNumber+currentTime
)
要實現的查詢是:
給定車牌號和查詢的時間區間,查詢給定的時間區間內所包含記錄的currentTime
的差值,並計算AverageSpeed
和該差值的乘積,求這段時間內的最高速度(HighestSpeed
),並按照type
值得不同進行劃分。–>(type
值只有0和1兩個值)
主要思路是,首先能夠得出的是相同type型別下同一個車牌號(也即同一車輛)在給定的時間區間內的currentTime
的差值,比如按照currentTime
排序號,相鄰兩條記錄currentTime
的差值,得出這個以後,其餘的都可以通過聚合函式得出。
我們以車牌號為京A111111為例,設計如下圖所示的測試用例。
可以看到車牌號為京A111111
的車輛總共有6條記錄,其中type
為0的有兩條,type
為1的有4條,
我們首先計算時間的差值,sql語句書寫如下:
SELECT a.platenumber,
a.currenttime,
a.type,
a.averagespeed,
a.highestspeed,
currenttime - (SELECT currenttime
FROM carmultispeedinfo
WHERE platenumber = a.platenumber
AND type = a.type
AND currenttime < a.currenttime
ORDER BY currenttime DESC
LIMIT 1)AS timediff
FROM carmultispeedinfo a
通過navicat
可以看到如下圖所示的查詢結果:
通過核查timediff
的值是正確的,這樣之後就可以在這個基礎上新增內容了。
完整的sql語句如下:
SELECT Sum(aa.averagespeed * aa.timediff) AS milesdiff,
Max(aa.highestspeed) AS HighestSpeed,
Sum(aa.timediff) AS timediff,
aa.type
FROM (SELECT a.platenumber,
a.currenttime,
a.type,
a.averagespeed,
a.highestspeed,
currenttime - (SELECT currenttime
FROM carmultispeedinfo
WHERE platenumber = a.platenumber
AND type = a.type
AND currenttime < a.currenttime
ORDER BY currenttime DESC
LIMIT 1) AS timediff
FROM carmultispeedinfo a)aa
WHERE aa.platenumber = '京A111111'
AND aa.currenttime >= 1521790124670
AND aa.currenttime <= 1521790125685
GROUP BY aa.type
顯示結果如下:
經過核對,是我們想要得出的結果。之後將sql
對應替換到mybatis
的mapper
檔案中就可以了。<記錄一下,備忘>將來有更深入的理解之後會繼續更新,謝謝大家。
相關文章
- 實現四則運算的一條sql語句SQL
- Oracle 同一sql語句在測試和開發環境不同的執行計劃OracleSQL開發環境
- 屬性動畫與差值器動畫
- MySQL 記錄所有執行了的 sql 語句MySql
- 用SQL語句去掉重複的記錄SQL
- 行轉列計算差值的一種優化優化
- jsqlparser使用記錄---生成sql語句JSSQL
- mysql語句:批量更新多條記錄的不同值[轉]MySql
- 查詢orcale執行的SQL語句記錄SQL
- 如何用redux實現computed計算屬性Redux
- vue計算屬性和vue實力的屬性和方法Vue
- 3. Vue語法--計算屬性Vue
- sql語句實現表的行列倒置SQL
- 計算屬性
- Vue的計算屬性Vue
- Oracle 行轉列的sql語句OracleSQL
- flutter 屬性記錄Flutter
- SQL語句筆記SQL筆記
- 使用SQL語句去掉重複記錄的兩種方法SQL
- 實用的SQL語句~!SQL
- 使用CREATETABLE語句宣告一個計算列(轉)
- 老生常談SQL2005語句實現行轉列,列轉行SQL
- 記一個實用的sql查詢語句SQL
- sql 2005 返回列描述的SQL語句SQL
- 如何用SQL語句實現以下功能.SQL
- Vue筆記三——計算屬性(computed)Vue筆記
- echarts常用屬性記錄Echarts
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- 用SQL語句刪除重複記錄的四種方法SQL
- Oracle 查詢並刪除重複記錄的SQL語句OracleSQL
- 【AWR】通過AWR報告中記錄的 SQL Id獲得SQL語句的執行計劃SQL
- Vue原始碼學習(十七):實現computed計算屬性Vue原始碼
- 利用 alter 語句修改欄位屬性
- 利用sql語句找出表中有重複記錄的三種sql寫法SQL
- 行變列構建sql語句SQL
- SQL語句 實現自動編號功能SQL
- vue 基礎入門筆記 19:計算屬性和偵聽屬性Vue筆記
- 通過分析SQL語句的執行計劃優化SQL語句SQL優化