人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLについて
ずばりのSQLを書いていただいた方には100ポイント!

次のようなテーブルがあるとします。

テーブルAカラム名-date
1/5
1/15
1/18
3/11
3/17
3/18
4/17

テーブルBカラム名-date
1/2
1/16
1/17
3/12
3/19
3/20
3/21
4/2
4/16

ここで、次の条件で値を取得するとします。
ルールは、
1)Aの日付よりもBの日付が過去
2)Aの日付よりBの日付は1ヶ月以内
3)Bの日付のうち、古い順に取得。既に取得されている値は取得できない
4)さらに3件前までしか選択できない
5)あればBの日付を取得、あてはまるものがなければ、null

結果として、Aの全ての値に対しての次のような値を取得したいと考えています。
1/51/2←1,2,3より
1/15null←1,2,3、5より
1/181/16←1,2,3より
3/11null←1,2,3、5より
3/173/12←1/17は2に合わないため、次の3/12
3/18null←1,2,3、5より
4/173/21←3/19、3/20は4に合わないため、選択できうる中で3件前の3/21

これを作るのに、SQLだけで何とかできないものでしょうか?

●質問者: iiiiiiiii
●カテゴリ:インターネット ウェブ制作
✍キーワード:SQL いもの カラム名 ポイント ルール
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● らいず
●20ポイント

この全ての条件を満たすには、DBは何を使用するのでしょう?

おそらく、ストアドプロシージャ等を利用しないと難しいように

思います。

◎質問者からの返答

すみません。そういえば書いてませんでした。

Postgresqlを使用します。

バージョンは7.4.1です。

ストアドプロシージャですか…。

あまり書ける自信が…。


2 ● らいず
●50ポイント

Postgresqlは使用したことがないので、答えられません。

すみません。

参考までに、Sybase や Oracle などでは、カーソルというSELECTしてきたデータを1行づつ参照したり、そのデータを利用して何か処理をしたり、加工したデータを処理結果としてPutしたりという手法があります。

おそらく、典型的なパターン(カーソルで取得してきたデータを、If-EndIf などの構文で囲む方法)で出来ると思いますので、ヘルプや参考書に書いてあるプロシージャ等の記述をアレンジすればOKだと思います。

◎質問者からの返答

なるほど。カーソルって奴ですね。

少し開けてきました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ