Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


736 / 2272 ツリー ←次へ | 前へ→

【10334】こういう日付を抽出するには・・。 あおぎん 08/4/23(水) 15:55 質問[未読]
【10335】Re:こういう日付を抽出するには・・。 hatena 08/4/25(金) 0:44 回答[未読]
【10338】Re:こういう日付を抽出するには・・。 あおぎん 08/4/25(金) 17:54 質問[未読]
【10340】Re:こういう日付を抽出するには・・。 hatena 08/4/25(金) 22:13 回答[未読]
【10343】Re:こういう日付を抽出するには・・。 あおぎん 08/4/30(水) 17:38 お礼[未読]

【10334】こういう日付を抽出するには・・。
質問  あおぎん  - 08/4/23(水) 15:55 -

引用なし
パスワード
   いつもお世話になっています。

パート社員の契約歴を管理しているのですが、会社の諸事情により、雇用契約を年度ごとかつ細切れに結んでいる状態です。

現在の管理方法は、

T_パート契約履歴に、契約履歴を入力していき、必要に応じて集計クエリで社員ごとの横並びの一覧などにしています。

社員コード 採用 採用日 退職 退職日
0001  1901 2007/4/1 1901 2007/9/30
0001  1902 2007/11/1 1902 2008/3/31
0001  2001 2008/4/1  2001 2008/6/30
0002  1901 2007/5/1 1901 2007/8/31 
0002  1902 2007/12/1 1902 2008/2/29
0002  2001 2008/4/1  2001 2008/6/30
※「採用」「退職」の「1901」は、19年度の1回目の契約という意味で入力。
※最大で年度に4回契約することあり。

で、採用日により社員を抽出する場合があるのですが、
採用日2008/4/1で抽出した場合、上の例で行くと、0001 0002とも抽出してしまうのですが、実質的には、0001の人は、年度切り替えのため契約を分けているだけで、実質上の契約は、2007/11/1〜2008/6/30となっています。で、0002の人は、2008/4/1〜2008/6/30です。この例で行くと、採用日2008/4/1で 0002の人のみを抽出したいのです。

上記のようなデータから、
社員コード 直近採用日 直近退職日
0001   2007/11/1  2008/6/30
0002   2008/4/1  2008/6/30

というようなデータが取得できないものかと頭を悩ませているのですが、なかなか思いつきません。採用日の最大を取得して、その前日と前の行の退職日が一致すれば、その前の採用日を取得する・・みたいな感じでどうにかできないかと考えているのですが、さらにその前の退職日とつながっている場合もあったりで、混乱しています。

現在は、継続採用者という形でチェックを入れることにより、該当の抽出を行っていますが、チェックし忘れもあるので、入力している履歴を使って抽出できればと思っています。
何かよい方法がありますでしょうか?

または、履歴の管理方法を変更したほうがよければ、そのあたりのアドバイスでもいいのでよろしくお願いします。

(Win Accessとも2000)

【10335】Re:こういう日付を抽出するには・・。
回答  hatena  - 08/4/25(金) 0:44 -

引用なし
パスワード
   >採用日2008/4/1で抽出した場合、上の例で行くと、0001 0002とも抽出してしまうのですが、実質的には、0001の人は、年度切り替えのため契約を分けているだけで、実質上の契約は、2007/11/1〜2008/6/30となっています。で、0002の人は、2008/4/1〜2008/6/30です。この例で行くと、採用日2008/4/1で 0002の人のみを抽出したいのです。

WHERE 採用日=#2008/4/1# AND 退職日<>#2008/3/31#

でいいのでは。

【10338】Re:こういう日付を抽出するには・・。
質問  あおぎん  - 08/4/25(金) 17:54 -

引用なし
パスワード
   ▼hatena さん:
>>採用日2008/4/1で抽出した場合、上の例で行くと、0001 0002とも抽出してしまうのですが、実質的には、0001の人は、年度切り替えのため契約を分けているだけで、実質上の契約は、2007/11/1〜2008/6/30となっています。で、0002の人は、2008/4/1〜2008/6/30です。この例で行くと、採用日2008/4/1で 0002の人のみを抽出したいのです。
>
>WHERE 採用日=#2008/4/1# AND 退職日<>#2008/3/31#
>
>でいいのでは。

回答ありがとうございます。

ご提示の条件で試しますと

採用日が 2008/04/01 のレコードの退職日は2008/3/31ではないので、採用日が 2008/04/01のレコードを全部拾ってしまいます。

適当な抽出条件はないでしょうか・・?

【10340】Re:こういう日付を抽出するには・・。
回答  hatena  - 08/4/25(金) 22:13 -

引用なし
パスワード
   >採用日が 2008/04/01 のレコードの退職日は2008/3/31ではないので、採用日が 2008/04/01のレコードを全部拾ってしまいます。

ぼけてました(汗)

>適当な抽出条件はないでしょうか・・?

WHERE 社員コード Not In (SELECT 社員コード FROM T_パート契約履歴 WHERE 退職日 = #2008/03/31#) AND 採用日 = #2008/04/01#

ではどうでしょうか。

【10343】Re:こういう日付を抽出するには・・。
お礼  あおぎん  - 08/4/30(水) 17:38 -

引用なし
パスワード
   ▼hatena さん:
>
>WHERE 社員コード Not In (SELECT 社員コード FROM T_パート契約履歴 WHERE 退職日 = #2008/03/31#) AND 採用日 = #2008/04/01#
>
>ではどうでしょうか。

回答ありがとうございます。
お礼が遅くなってすみません。

ご提示の方法で希望のデータを取得できました!!

Not IN ??
初耳です。
いろんな方法があるのですね〜。

ありがとうございました!

736 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078199
(SS)C-BOARD v3.8 is Free