SQLに関する適当なフォーラムを見つけられなかったので、こちらにご質問させていただきました。失礼ですが、何方かお教えいただければと思います。
(テーブルA)
INDEX ナンバー 取扱者 IN OUT
1 1001 A 2007/01/01
2 1001 B 2007/01/02
3 1002 A 2007/01/03
4 1001 A 2007/01/04
5 1002 A 2007/01/05
6 1002 B 2007/01/06
7 1001 A 2007/01/07
8 1002 B 2007/01/08
上記のようなテーブルがあり、最終的に現在OUTの状態にあるナンバーのものを
Flex Gridに表示させたいのです。Flex Gridの表示については何とか分かりますが、SQL文が全く分かりません。この場合は7と8のレコードを抽出し、
INDEX ナンバー 取扱者 OUT
7 1001 A 2007/01/01
8 1002 B 2007/01/02
としたいのです。同じナンバーのものに対して取扱者が変わるので最終的なOUTの状態のものが取扱者が違う場合両方とも表示されてしまいます。何か上手な条件指定はないかと考えています。分かりにくい説明で大変申し訳ありませんが、何方かお教えいただければと思います。よろしくお願い致します。
>SQLに関する適当なフォーラムを見つけられなかったので
SQLのフォーラムが見つからなかったから
書いちゃえ〜、じゃなくってさ
探そうよ。
なんか悩んだり、考えたりする時間が根本的に足りないように思います。
さらに、INDEX7と8を抽出し・・・で、なぜ
7 1001 A 2007/01/01
8 1002 B 2007/01/02
になるのでしょうか?
7 1001 A 2007/01/07
8 1002 B 2007/01/08
なら、まだ分かりますけど。
で、INDEXの位置付けも不明です。確実に大きい方に新しいデータが入っているとか
規則があるんじゃないですか?
また、
同一ナンバーでINDEXが最大でOUTがNOT NULLのも
みたいに自分で条件を挙げれたらSQLの条件に置き換えたらいいだけです。
個人的には、VBに関る(ぎりぎりかすっている)話なので、
この掲示板でも良さげな気はしましたが・・・
> SQLに関する適当なフォーラムを見つけられなかったので、
これが、一言余計でしたね。
ご自分で「VBは関係ない宣言」をしているようなものですから・・・
> 同じナンバーのものに対して取扱者が変わるので
> 最終的なOUTの状態のものが取扱者が違う場合両方とも表示されてしまいます。
せめて、できているSQLぐらい提示して欲しいですね・・・
これって、多分、3段階(サブクエリの入れ子?)でやるんですよね。
(1)IN/OUTのチェック
IN状態のものを省かなければならないですよね?
これは、どうやっているんでしょう?
マンナンバでGroupByをして、IN日付のMAXよりOUT日付のMAXが大きい場合?
表として、同じ日にIN/OUTをやることがあるんでしょうか?
もしあるなら・・・IN・OUTのCOUNTでチェック?
(OUTのカウントがINのカウントと同じならOUT?)
(2)(1)でOUTと判定された、マンナンバーとOUTのMAX日付から
対象レコードのINDEXを参照
(3)(2)で見つけたINDEXで該当レコードの参照
とか?
#私なら、面倒なので、SQLを3回実行するかも・・・
| ツイート |
|