- PR -

SQL Server 2000 条件付きで日付の最大値を取得するについて

1
投稿者投稿内容
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 2004-11-24 14:35
すみません。以下のようなデータが存在するとき
select文をつかって (SQL Server 2000)
コードごとに  
@パラメータの時間より小さい終了時間のレコードが存在する場合、
パラメータの時間より小さい終了時間の中の最大値を取り出す。
Aパラメータの時間より小さい終了時間のレコードがない場合、
パラメータの時間より大きい終了時間の最小値を取り出す
B終了時間のデータがないレコードも取得する

以下の様な表で、
パラメータは2004-11-03 01:00として、

コード  スタート時間   終了時間
01  2004-11-01 01:00 2004-11-01 02:00
01  2004-11-02 02:00 2004-11-02 03:00 →コード01のこの行を取り出す
01  2004-11-03 03:00 2004-11-03 04:00

02   2004-11-04 01:00 2004-11-01 02:00 →コード02のこの行を取り出す
02   2004-11-05 01:00 2004-11-01 02:00


03   →終了時間がないコード03のデータも取り出す
04   ・・・・・・

よろしくおねがいいたします

[ メッセージ編集済み 編集者: 未記入 編集日時 2004-11-24 15:42 ]
たけだ
会議室デビュー日: 2004/09/09
投稿数: 7
投稿日時: 2004-11-24 17:44
思いつきですが、

select コード,スタート時間,終了時間
from テーブル a
where 終了時間 = isnull((select max(終了時間) from テーブル where コード = a.コード and 終了時間 <= '2004/11/3 01:00:00'),(select min(終了時間) from テーブル where コード = a.コード and 終了時間 >= '2004/11/3 01:00:00'))
or 終了時間 is NULL

ってな感じではどうでしょうか?
コスト高すぎでしょうか...
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 2004-11-25 09:21
たけだ様、
タイトルの問題は別の方法(二つのSELECT文の結合)で解決しました。

SELECT [コード], MAX([終了時間])
FROM [表]
WHERE [終了時間] < @PARAMETER
GROUP BY [コード]
UNION
SELECT [コード], MIN([終了時間])
FROM [表]
GROUP BY [コード]
HAVING MIN([終了時間]) >= @PARAMETER OR MIN([終了時間]) IS NULL

アドバイス、ありがとうございました。




[ メッセージ編集済み 編集者: comeseesee 編集日時 2004-11-26 10:24 ]
1

スキルアップ/キャリアアップ(JOB@IT)