十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
小編今天帶大家了解SQL怎么查詢連續(xù)上漲 N 次的記錄,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺(jué)得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問(wèn)題的朋友找到問(wèn)題的答案,下面跟著小編一起深入學(xué)習(xí)“SQL怎么查詢連續(xù)上漲 N 次的記錄”的知識(shí)吧。
成都創(chuàng)新互聯(lián)公司專注于青浦網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供青浦營(yíng)銷型網(wǎng)站建設(shè),青浦網(wǎng)站制作、青浦網(wǎng)頁(yè)設(shè)計(jì)、青浦網(wǎng)站官網(wǎng)定制、成都小程序開(kāi)發(fā)服務(wù),打造青浦網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供青浦網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
用SQL如何查詢連續(xù)上漲N次的記錄?
這個(gè)問(wèn)題用SQL來(lái)做很難!
SQL的理論基礎(chǔ)是無(wú)序集合,早期SQL也沒(méi)有次序的概念,需要用JOIN造出次序,連續(xù)上漲這種問(wèn)題就非常困難。后來(lái)在SQL2003標(biāo)準(zhǔn)中加入了窗口函數(shù),一定程度地緩解了這個(gè)問(wèn)題,但解決連續(xù)上漲問(wèn)題仍然并不輕松。
舉個(gè)例子:查詢連續(xù)n天上漲的股票,現(xiàn)有數(shù)據(jù)庫(kù)表stock數(shù)據(jù)如下:
code | stockdate | close |
000062 | 2015-01-05 | 8.91 |
000062 | 2015-01-06 | 8.31 |
000062 | 2015-01-07 | 7.6 |
000062 | 2015-01-08 | 7.93 |
000062 | 2015-01-09 | 7.72 |
… | … | … |
如果查詢連續(xù)3天上漲的股票,用SQL寫出來(lái)是這樣:
WITH A AS
(SELECT CODE,STOCKDATE,(CLOSE-LAG(CLOSE) OVER (PARTITION BY CODE ORDER BY STOCKDATE) )CLOSE_UP FROM STOCK),
B AS
(SELECT CODE,
CASE WHEN CLOSE_UP>0 AND
LAG(CLOSE_UP) OVER (PARTITION BY CODE ORDER BY STOCKDATE)>0 AND
LAG(CLOSE_UP,2) OVER (PARTITION BY CODE ORDER BY STOCKDATE)>0
THEN 1 ELSE 0 END UPDAYS3 FROM A)
SELECT DISTINCT CODE FROM B WHERE UPDAYS3=1
這里把3天寫死進(jìn)去了,要查詢連續(xù)5天就會(huì)更復(fù)雜, n天就不知道怎么寫。
對(duì)于這種有序的運(yùn)算,如果使用集算器的SPL語(yǔ)言就會(huì)簡(jiǎn)單很多,只需2行代碼:
A | |
1 | =connect("mydb").query("select * from stock order by code, stockdate").group@o(code) |
2 | =A1.select((a=0,~.pselect((a=if(close>close[-1],a+1,0))>=5))>0).(code) |
如果要查詢n天,只要把A2中的5改成n即可。
SPL基于有序集合實(shí)現(xiàn),對(duì)有序計(jì)算的支持比較徹底,能清楚表述集合中任意位置的記錄,通過(guò)絕對(duì)/相對(duì)位置定位,很容易計(jì)算股票每日漲跌。
感謝大家的閱讀,以上就是“SQL怎么查詢連續(xù)上漲 N 次的記錄”的全部?jī)?nèi)容了,學(xué)會(huì)的朋友趕緊操作起來(lái)吧。相信創(chuàng)新互聯(lián)小編一定會(huì)給大家?guī)?lái)更優(yōu)質(zhì)的文章。謝謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!