SQLを習いはじめました。
ユーザーIDが100件あるテーブルの30件目~50件目の
ユーザIDを抽出し、別テーブルに登録をしたいと思っています。
『このxx件目からxx件目まで』の抽出のしかたがわかりません。
どなたかわかる方がいましたら教えてください。
DECLARE
CURSOR cursor_name IS SELECT USER_ID FROM TBL_USERID ;
getid VARCHAR2(16);
ryear NUMBER := '2008';
ryear2 NUMBER := '08';
rmonth NUMBER;
rday NUMBER;
usercnt NUMBER;
rcnt NUMBER := '0';
--処理開始
BEGIN
SELECT count(USER_ID) INTO usercnt FROM TBL_USERID ;
OPEN cursor_name ;
LOOP
FETCH cursor_name INTO getid ;
EXIT WHEN cursor_name%NOTFOUND;
--月でループ(1~12月)
For rmonth IN 1..12
LOOP
--日でループ(1~22日)
For rday IN 1..22
LOOP
--スケジュール1件目
rcnt := (rcnt + 1);
INSERT INTO TBL_SCH
(
SCHEDULE_ID
,USER_ID
,UPDATE_DATETIME
) VALUES (
ryear || Trim(TO_CHAR(rmonth,'00')) || Trim(TO_CHAR(rday,'00')) || Trim(TO_CHAR(rcnt,'00000000'))
,'getid'
,SYSTIMESTAMP
);
END LOOP;
END LOOP;
END LOOP ;
CLOSE cursor_name ;
END ;
No.3ベストアンサー
- 回答日時:
分析関数を使った例。
SQL SERVER2005から、ORACLEなら8iのEE(9iからはSTANDARD EDITIONも)から使えます。SELECT A.*
FROM
( SELECT *,ROW_NUMBER() OVER( ORDER BY ソートキー項目 ) RN
FROM テーブル名 ) A
WHERE RN BETWEEN 30 AND 50
回答ありがとうございます。
テープルはこのような感じなのですが、頂いた回答からすると…
+---------+-----------+
| USER_ID | USER_NAME |
+---------+-----------+
| 001 | nameA |
+---------+-----------+
| 021 | nameB |
+---------+-----------+
| 042 | nameC |
+---------+-----------+
DECLARE
CURSOR cursor_name IS SELECT TBL_USERID.USER_ID FROM
( SELECT USER_ID,ROW_NUMBER() OVER( ORDER BY USER_ID ) RN
FROM TBL_USERID) TBL_USERID WHERE RN BETWEEN 30 AND 50;
getid VARCHAR2(16);
ryear NUMBER := '2008';
ryear2 NUMBER := '08';
rmonth NUMBER;
rday NUMBER;
usercnt NUMBER;
rcnt NUMBER := '0';
--処理開始
BEGIN
SELECT count(USER_ID) INTO usercnt FROM TBL_USERID ;
OPEN cursor_name ;
LOOP
FETCH cursor_name INTO getid ;
EXIT WHEN cursor_name%NOTFOUND;
・
・
・
となるのでしょうか?
いますぐ検証環境でテストができないので・・
No.2
- 回答日時:
たしかにSQLServerの書き方には見えませんね(汗
MySQLならLIMITがあります。SQLServerだと
SELECT TOP 20 [column]
FROM [table]
WHERE [column] NOT IN (SELECT TOP 30 [column] FROM [table]);
などとすれば31~50件めが取得できます(元のselectとサブのselectのorderを合わせないといけません)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
階層問い合わせで重複レコード...
-
sql文のwhere句について
-
検索対象のデータが「複数レコ...
-
ビュー情報(user_views)の参...
-
差し込み後、元データを変更し...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
カーソル0件の時にエラーを発生...
-
SQLで列名を変数にできないでし...
-
for whichの使い方
-
副問合せの書き方について
-
INSERT文でフィールドの1つだ...
-
処理件数を非表示にしたい
-
日本語のエイリアスは" "で囲...
-
重複していないレコードの抽出...
-
速度が低下し無効になったアド...
-
EXISTSを使ったDELETE文
-
特定条件でWHERE句の条件を変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
OR と IN の違い
-
ビュー情報(user_views)の参...
-
最新から100行のSELECT文
-
sqlのテーブル名省略について
-
大文字/小文字の区別しないで検...
-
sql文のwhere句について
-
検索対象のデータが「複数レコ...
-
Oracleのエラースタックトレー...
-
Oracle SQLの、where句内の条件...
-
階層問い合わせで重複レコード...
-
コンパイルエラーが出ます。助...
-
重複レコードのある項目を比較...
-
caseを使った条件分岐の加算が...
-
一つのSQLにできませんか??
-
SQL xx件目からxx件目まで...
-
Oracle 11g コミットのタイミン...
-
sqlite3のover句の代替えについて
-
PL/SQL デバック方法:入力を受...
-
各グループの最終日より一週間...
-
MAX日付のSQLについて
おすすめ情報