iT邦幫忙

0

請問一下這段SQL可以怎麼寫呢?

  • 分享至 

  • xImage

我想請問一下我有一段SQL

for result in(
    select * from tableA
    where Dt <= '2021/10/18' AND Dt >'2021/10/17'
)loop

假設今天是10/18我想取這10天的區間會產生這樣的語法

for result in(
    select * from tableA
    where Dt <= '2021/10/18' AND Dt >'2021/10/17'
)loop

for result in(
    select * from tableA
    where Dt <= '2021/10/16' AND Dt >'2021/10/15'
)loop

for result in(
    select * from tableA
    where Dt <= '2021/10/14' AND Dt >'2021/10/13'
)loop


for result in(
    select * from tableA
    where Dt <= '2021/10/12' AND Dt >'2021/10/11'
)loop


for result in(
    select * from tableA
    where Dt <= '2021/10/10' AND Dt >'2021/10/09'
)loop

for result in(
    select * from tableA
    where Dt <= '2021/10/08' AND Dt >'2021/10/07'
)loop

類似迴圈的寫法
只是我不清楚怎麼寫,所以想請問各位該如何調整呢?

rain_yu iT邦研究生 5 級 ‧ 2023-10-19 08:55:09 檢舉
你有示意圖可以看嗎,或是再多一點文字敘述
tenno081 iT邦研究生 4 級 ‧ 2023-10-19 09:31:26 檢舉
你好,我有更新再請你看一下
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
wdchiang
iT邦新手 2 級 ‧ 2023-10-19 11:39:59
最佳解答
DECLARE
   CURSOR c_tableA IS
      SELECT *
      FROM tableA
      WHERE Dt <= TO_DATE('2021/10/18', 'yyyy/mm/dd') AND Dt > TO_DATE('2021/10/07', 'yyyy/mm/dd');
   
   r_tableA tableA%ROWTYPE;
BEGIN
   OPEN c_tableA;

   LOOP
      FETCH c_tableA INTO r_tableA;
            EXIT WHEN c_tableA%NOTFOUND;

      -- 處理資料
	  
   END LOOP;

   CLOSE c_tableA;
END;
tenno081 iT邦研究生 4 級 ‧ 2023-10-20 14:54:08 檢舉

你好,感謝解答,我再研究一下謝謝~

0
一級屠豬士
iT邦大師 1 級 ‧ 2023-10-19 00:45:16

https://blogs.oracle.com/connect/post/working-with-cursors

你又改了? Oracle 的 SQL 與 PL/SQL 是分開的,不像SQL Server 是一起叫T-SQL.
你先用個 for in () , 後面又變成N個 for in.

其實取日期區間資料,不難,但你要能夠說清楚目的,table的結構,範例資料,想要的結果.
而不是問語法. SQL 思考方式與程序語言不同. Oracle 有 start with connect by
語法,就可以產生序列了,也可以用遞回 CTE方式.

如果是要用日期分,可以用 trunc()函數
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/TRUNC-date.html#GUID-BC82227A-2698-4EC8-8C1A-ABECC64B0E79

也可以參考一下這篇:
https://ithelp.ithome.com.tw/questions/10214403

tenno081 iT邦研究生 4 級 ‧ 2023-10-20 14:53:50 檢舉

真的抱歉>< 因為有人留言說我的敘述不太清楚所以我才改一下
真的SQL的思考方式跟一般程式不一樣,總覺得好難,哈哈,我假日再研究一下真的感謝

tenno081 iT邦研究生 4 級 ‧ 2023-10-20 14:55:09 檢舉

真的Oracle的SQL與PL/SQL是分開的嗎?這個我是第一次聽說
因為我以前是用SQL DEVELOPER,想說只是介面不同

看你一直都在用迴圈要去產生日期序列,然後再組成N道SQL,不管是
T-SQL SP 還是 C#, 還記得之前我有舉例一次就產生的SQL嗎?
你應該把你們想要做到的功能,整理清楚,而不是在方法上.
要分組資料可以善用日期函數.

我要發表回答

立即登入回答