Ⅰ sql如何一次取出2天的數據(有時候某些天沒數據),求思路
按照你給的說法和例子( 1號3條數據,2號沒有數據,3號2條數據,),那麼所謂的一次兩天,應該是取出1號和3號的5條數據,是這個意思吧。
假設4,5號都有數據,那麼現在是(1有數據,2沒數據,3有數據,4有數據,5有數據)其他不算,就說這五天
那麼你說的一次取出兩天的數據怎麼取?從後往前,還是從前往後,亦或是隨便取?還是多次取,每兩天的都取出來?給的需求並不是十分明確。
個人認為最大的可能是從後往前,或者某一個時間段往前或者往後。
如果是數據塊的話很好寫,定義兩個變數,兩個初始都是0,我們假設為a,b,a代表有數據天數,b代表天數。輸入當前日期(查詢日期),然後在表內對當前日期進行count計數,如果計數不為0,那麼a=a+1,b=b±1(根據向前還是向後查詢自己分配),如果計數為0,那麼只b±1,然後判斷一下a是否等於2,如果a不等於2,那麼繼續循環,直到循環出現兩個計數不為0的天,那麼a=2了,然後就能退出循環,這是查詢出的內容就是兩天的。
如果是單條sql的話,考慮到查詢的當天可能也沒有數據,比如你要查詢2號(包含)往後的兩天(一般來說是2號和3號的數據),但是2號沒有數據,所以輸出的應該是3號和4號的數據。
單獨的sql好像能寫出來,我說一個思路,開窗函數,你對找出來的數據,比如大於等於2號的數據進行排序,這個排序是開窗(oracle的話這里用rank,其他數據不知道),其他資料庫不知道)的排序,(不分組,按照日期的截取到日去排序,也就是不算具體的時間,而是1號,2號,這樣的排序)這時,3號的所有數據會被標記為1,4號的所有數據被標記為2,然後再截取排序號小於等於2的就可以了。
其他的還有,不過要麼是計數,要麼是開窗排序,而且不一定能寫出來,或者就算寫出來了,可能也比較耗費資源,估計可用性不大。
Ⅱ SQL如何在查詢結果里再次查詢
做法:可以使用括弧「(select查詢子句)"套嵌一個查詢結果。語法格式:select columnlist... from (select子句) table_name where 。注意:」)「 後面需要給查詢結果指定一個名稱table_name,名稱不要與其他列名稱相同,增加SQL語句的可讀性。
拓展:
1、SQL語言,是結構化查詢語言(StructuredQueryLanguage)的簡稱。SQL語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
2、SQL語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的結構化查詢語言作為數據輸入與管理的介面。SQL語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。
3、結構化查詢語言SQL(STRUCTURED QUERY LANGUAGE)是最重要的關系資料庫操作語言,並且它的影響已經超出資料庫領域,得到其他領域的重視和採用,如人工智慧領域的數據檢索,第四代軟體開發工具中嵌入SQL的語言等。