
判定条件がうまく設定できずに困っています。
|No| on/off | 開始時間 |
| 1 | 0 or 1 | 0 ~ 23 |
| 2 | 0 or 1 | 0 ~ 23 |
| 3 | 0 or 1 | 0 ~ 23 |
| 4 | 0 or 1 | 0 ~ 23 |
| 5 | 0 or 1 | 0 ~ 23 |
| 6 | 0 or 1 | 0 ~ 23 |
DBに設定された開始時間(0時から23時。設定値も数値で0~23)と現在時間(0~23)とを比較して、開始時間になればデータを送信するというプログラムの判定条件なのですが、データ数はon/offによって比較対象にするかどうかを決められるので、データ数は0から最大6つの可変になります。
onになっているデータが2つ以上あれば開始時間を参照して、常にひとつはデータが取得される方式です。
また開始時間に設定されるデータに重複する開始時間のデータは存在せず、おのおのユニークな開始時間が設定されています。
たとえば現在時間が0時で、設定された開始時間が22時・23時だと23時のデータを取得してくる、現在時間が10時で9時・11時・13時と設定されていれば11時・13時は開始時間より前なので9時のデータを取得する、そのようなイメージです。
データ数が2つのときの条件はまだ何とかなりそうなのですが、3つ以上になったときにどのような条件を指定すればよいのか全然わかりません・・・。
お力添えいただければ幸いです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> max()での判定だとたとえば23時と0時のデータがあるときに0時のほうを取る条件がいまひとつ上手くいかないような気がするのですが。
where句により、現在時刻が0時なら23はひっかからないから大丈夫かと。
> 現在時間が0時で、設定された開始時間が22時・23時だと23時のデータを取得してくる
これに対応するなら、0時を24時とみなして再検索するとか。あえてSQLで書くならこんな感じ:
select max( t ) % 24 from (
select [開始時間]+24 as t from DB where [on/off] = 1 and [開始時間] <= 現在時間
union
select [開始時間] as t from DB where [on/off] = 1 and [開始時間] <= 現在時間+24 );
ここで%は剰余演算子。あと開始時刻の制約をこっそり訂正。
やっぱり試さないで書いてます。
No.1
- 回答日時:
> DB
試さないで書いてますが、SQLが使えるなら、こんな感じ?
select max( [開始時間] ) from DB where [on/off] = 1 and [開始時間] < 現在時間;
戻り値がデータ取得時刻。※ここでは1のときonであると仮定してます。
> onになっているデータが2つ以上あれば
については、次のクエリで確認:
select count( [on/off] ) from DB where [on/off] = 1;
SQLが使えないときは、別途検討。
この回答への補足
max()での判定だとたとえば23時と0時のデータがあるときに0時のほうを取る条件がいまひとつ上手くいかないような気がするのですが。
1レコードに開始時間でソートした上でlag()やlead()を使って前後のレコードを持っておいてcase文で判定をする、そのような方法も考えたのですがいずれにしろ判定の条件が上手く立てられないので困っているところです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
指定文字を太字にするVBAを別シ...
-
select文の実行結果に空白行を...
-
SQLローダーCSV取込で、囲み文...
-
SELECT FOR UPDATE で該当レコ...
-
ハイフンの入ったデータの並べ替え
-
単一グループのグループ関数で...
-
where句中のtrim関数について
-
データ
-
サブクエリを使わない方法
-
SQL*Loader Append
-
ファイルメーカー10で重複デー...
-
【PL/SQL】FROM区に変数を使う方法
-
int型フィールドにnullを登録で...
-
<SQL>重複しているデータの場合...
-
並べ替えについて
-
ソート(PL/SQL)
-
MYSQLで月ごとの集計をおこない...
-
レコードの登録順がおかしい
-
MySQLでの近似値順での値の取得...
-
テーブルレーコードをソートし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6のオラクルのバインド変数
-
accessvbaで内容を結合して保存
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
select文の実行結果に空白行を...
-
並べ替えについて
-
group byの並び順を変えるだけ...
-
SELECT FOR UPDATE で該当レコ...
-
データ
-
【PL/SQL】FROM区に変数を使う方法
-
SQL*Loader Append
-
トランザクションログを出力せ...
-
レコードの登録順がおかしい
-
AccessのSQL文で1件のみヒット...
-
where句中のtrim関数について
-
count関数の値をwhere句で使用...
-
アクセスのレポートでレコード...
-
BLOBやCLOBのパフォーマンスを...
おすすめ情報