按條件查出兩條記錄後求其位置間隔
資料排序以後,按照查詢條件找到需要的兩條記錄,然後算出這兩條記錄之間間隔了多少條記錄。
用SQL來求這個解比較麻煩!
SQL的集合中沒有記錄順序,不能提供記錄的位置資訊。SQL2003標準中加入了視窗函式,能夠給記錄新增行號了,解決這個問題就需要先新增行號,然後再用多次子查詢定位計算。
舉個例子:現有股票收盤價資料表STOCK資料如下,要求查出股票000062最後的最低收盤價和最後的最高收盤價之間相隔多少個交易日:
CODE | STOCKDATE | CLOSE |
000062 | 2019-01-02 | 8.11 |
000062 | 2019-01-03 | 8.31 |
000062 | 2019-01-04 | 8.76 |
… | … | … |
000062 | 2019-12-30 | 7.32 |
000062 | 2019-12-31 | 7.12 |
… | … | … |
以Oracle為例,用SQL寫出來是這樣:
WITH T AS
(SELECT *, ROW_NUMBER() OVER (ORDER BY STOCKDATE) RN FROM STOCK WHERE CODE='000062'),
T1 AS (SELECT * FROM T WHERE CLOSE = ( SELECT MIN(CLOSE) FROM T )),
T2 AS (SELECT * FROM T WHERE CLOSE = ( SELECT MAX(CLOSE) FROM T )),
T3 AS (SELECT * FROM T1 WHERE RN = ( SELECT MAX(RN) FROM T1 )),
T4 AS (SELECT * FROM T2 WHERE RN = ( SELECT MAX(RN) FROM T2 ))
SELECT ABS(MAX(T3.RN)-MAX(T4.RN)) FROM T3, T4;
這個SQL子查詢很多,可讀性不太好。
如果用集算器的SPL語言來解決這個問題,就會簡單很多,只需2行程式碼:
|
A |
1 | =connect("mydb").query("select * from stock where code=’000062’ order by stockdate") |
2 | =abs(A1.pmin@z(CLOSE)-A1.pmax@z(CLOSE)) |
SPL語言支援有序集合物件,提供了返回記錄在集合中位置的函式,所以解決這個問題的思路就非常自然,讀者一看就明白了。
SPL 集合還提供了交、差、並運算,聚合運算,迴圈遍歷運算,請閱 、 。
SPL也能很方便地嵌入到JAVA應用,可參考 。
具體使用方法可參考 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2698009/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- react記錄頁面的滾動條位置React
- 查詢條件和條數,先查詢兩條免費的,後面為vip
- Go 條件語句 - Go 學習記錄Go
- Stream中filter過濾條件問題記錄Filter
- Linq兩個from查詢條件
- SAP MM 自定義條件型別出現在採購資訊記錄的'條件'介面裡 ?型別
- TP5 搜尋按條件分頁
- ORACLE sql merge into update where條件位置與效能消耗OracleSQL
- 條件渲染
- React學習筆記-條件渲染React筆記
- MySQL筆記 10 條件邏輯MySql筆記
- Python按條件刪除Excel表格資料的方法PythonExcel
- JUnit5學習之四:按條件執行
- Vue 返回記住滾動條位置詳解Vue
- 一句話得到中間值的多條記錄
- 記錄一篇關於條件查詢語句的用法:1.通過QueryWrapper進行條件構造2.通過Example進行條件構造APP
- MySQL 多表分組後獲取每一組的時間最大的那條記錄MySql
- mysql刪除一條記錄MySql
- 帶你讀 MySQL 原始碼:where 條件怎麼過濾記錄?MySql原始碼
- makefile 條件判斷用法和 自定函式用法簡單記錄函式
- PostgreSQL啟動恢復讀取checkpoint記錄失敗的條件SQL
- postgresql 多條記錄合併一條,或取最新的一條資料SQL
- If條件倒裝
- Selenium等待條件
- 條件函式函式
- 屈服條件8
- openGauss 前提條件
- 條件語句
- Excel 條件格式Excel
- PL/SQL 條件SQL
- react 條件渲染React
- 印表機打出來有條紋怎麼處理 印表機打出來有間隔白條
- JN專案-時間查詢條件驗證
- Python按條件篩選、剔除表格資料並繪製剔除前後的直方圖Python直方圖
- excel條件格式怎麼設定 excel條件格式在哪裡Excel
- Java雜記3—流程控制之條件Java
- springboot 條件裝配Spring Boot
- java-queryWrapper條件JavaAPP