- - PR -
SQL Server 2000 条件付きで日付の最大値を取得するについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-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 ってな感じではどうでしょうか? コスト高すぎでしょうか... |
|
投稿日時: 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