![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
初めて質問します。
下記のようなデータが存在します。
テーブルA
NO DATE GYO
1 2010/12/01 1
1 2010/12/01 2
2 2010/12/01 1
2 2010/12/01 2
2 2010/12/01 3
3 2010/12/02 1 <=
4 2010/12/03 1
4 2010/12/03 2
上記データにて、<=の行の値を取得し変数へ代入したとします。
変数.NO =3
変数.日付 =2010/12/02
変数.GYO =1
上記、変数を元に1件前のレコードを抽出したいのですが
SQL文でのいい方法がわかりません。
取得したいレコード
1 2010/12/01 1
1 2010/12/01 2
2 2010/12/01 1
2 2010/12/01 2
2 2010/12/01 3
どうかお願いいたします。
No.3ベストアンサー
- 回答日時:
こんばんは。
単純に文字列結合して、小さいものを取ればいいのでは?
DATEカラムがDATE型、GYOカラムがNUMBER型と仮定します。
違ってたら、適当に型変換してください・・・。
SELECT *
FROM テーブルA
WHERE TO_CHAR(DATE,'YYYYMMDD')||RPAD(TO_CHAR(GYO),3,'0') < 同じように変換した、対象データ
やってる事は一緒です。
ただ、SQLでやってるだけ・・・。
遅くなり申し訳ございません。
ご回答ありがとうございました。
SQL文でカラム同士を結合できるのですね。
すみません。勉強不足でした。
大変、参考になりました。ありがとうございました。
また、今後ともよろしくお願いいたします。
No.2
- 回答日時:
推測ですが
SELECT *
FROM テーブルA
WHERE (NO,DATE,GYO) < ( 3,TO_DATE('2010/12/02','YYYY/MM/DD'), 1)
みたいな事をやりたいということでしたら、Oracleでは文法エラーになってしまいます。
(PostgreSQLだと出来るのですが)
なんで
(NO<3) or
( (NO=3) and (DATE<TO_DATE('2010/12/02','YYYY/MM/DD') ) or
( (NO=3) and (DATE=TO_DATE('2010/12/02','YYYY/MM/DD') and ( GYO<1 ))
と書くしかないですね。
外していたらごめんなさい。
この回答への補足
ご回答ありがとうございました。
ただ私の質問の仕方がまずくNoは実データとしては存在せずに
データの並びとしてわかりやすいように記載していました。
実データとしてはDATE、GYOのみです。
申し訳ございません。
具体的な実データの中身は
テーブルA
DATE(10桁) GYO(3桁)
2010/12/01 1
2010/12/01 2
2010/12/01 3
2010/12/02 1 <=
2010/12/03 1
2010/12/03 2
現在は、
select
*
from
テーブルA
where
(SAGYODAY <= '2010/12/02')
order by
DATE DEC
,GYO DEC
にて
一旦、範囲を日付だけでデータ取得し、プログラム内部で
DATEとGYOを結合し(GYOは3桁0埋め変換)
2010/12/02001 <=
2010/12/01003
2010/12/01002
2010/12/01001
<=のデータより小さいデータを対象として処理を行っています。
この処理を行うのではなく、SQLだけでデータ取得できないかと思っております。
申し訳ございませんが、よろしくお願い致します。
No.1
- 回答日時:
このテーブルのデータだけを考えると
Where no < 変数.NO
だけでないでしょうか?
この回答への補足
ご回答ありがとうございました。
ただ私の質問の仕方がまずくNoは実データとしては存在せずに
データの並びとしてわかりやすいように記載していました。
実データとしてはDATE、GYOのみです。
申し訳ございません。
具体的な実データの中身は
テーブルA
DATE(10桁) GYO(3桁)
2010/12/01 1
2010/12/01 2
2010/12/01 3
2010/12/02 1 <=
2010/12/03 1
2010/12/03 2
現在は、
select
*
from
テーブルA
where
(SAGYODAY <= '2010/12/02')
order by
DATE DEC
,GYO DEC
にて
一旦、範囲を日付だけでデータ取得し、プログラム内部で
DATEとGYOを結合し(GYOは3桁0埋め変換)
2010/12/02001 <=
2010/12/01003
2010/12/01002
2010/12/01001
<=のデータより小さいデータを対象として処理を行っています。
この処理を行うのではなく、SQLだけでデータ取得できないかと思っております。
申し訳ございませんが、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのview、synonymをCOMPIL...
-
PLSQLのバインド変数の件です。
-
oracle 複数列を1列にまとめる
-
テーブル名をカラムとして取得...
-
男性と2人で飲食店に行きテーブ...
-
アクセス レコードセットを更...
-
オーダーの覚え方について
-
DBのテーブルの設計ができず困...
-
会社の飲み会の幹事になり、座...
-
一つ前に戻るには…
-
外部キーだけのテーブル(主キ...
-
処理の途中で停止させ、再開さ...
-
MACアドレス見えない
-
ACCESSで容量が50MBになった...
-
ACCESS での LEFT JOIN 時の WH...
-
テーブルにcsvファイルをインポ...
-
mysqlのフィールド名
-
ビューのソートについて
-
「テーブルに座って……」という...
-
取数計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
カラム位置変更
-
SQLで違うテーブルの値を比較し...
-
LONG型の先頭250バイトを Varch...
-
PLSQLのNumber型の初期化
-
数値をNUMBER型にするかCHAR型...
-
半角英数文字の抽出がしたい。
-
DELETE文とロックについて
-
SQL(oracle)でご助言いただきた...
おすすめ情報