私のデフォルトの利用可能な部屋(avaroom)は0です。私は開始日と終了日を選択したときにそれを利用可能かどうかチェックしたい。開始日と終了日の間に利用可能なすべての部屋をチェックする方法は?
私のSQLクエリは
select *
from roomcalendar
where day between '2016-08-26' and '2016-08-31' and avaroom != 0
結果はこのようになります。私はこのクエリ
select *
from roomcalendar
where day between '2016-08-26' and '2016-08-31' and avaroom != 0
having count(*) = datediff('2016-08-31', '2016-08-26')
結果は空になります使用
。それは本当です。私はすべての部屋が開始日と終了日の間にあるかどうかをチェックしているからです。私は変更
次のクエリは、日付26と終了日を開始するために27
select *
from roomcalendar
where day between '2016-08-26' and '2016-08-27' and avaroom != 0
having count(*) = datediff('2016-08-27','2016-08-26')
出力は1行
Yes.itまだ右になります。 26日の部屋が利用可能であるため。再び
私は28部屋も右available.itされていないため、Yes.itはまだwork.iそれが空だと思う28
select *
from roomcalendar
where day between '2016-08-26' and '2016-08-28' and avaroom != 0
having count(*) = datediff('2016-08-28','2016-08-26')
開始日26と終了日を確認してください。
今すぐ。私は再び変えようとします。開始日29および終了日30
select *
from roomcalendar
where day between '2016-08-29' and '2016-08-30' and avaroom != 0
having count(*) = datediff('2016-08-30', '2016-08-29')
Opps!それは結果を示さない。私は29日の部屋が利用可能だと思います。 1行が表示されます。右? 正しいクエリを取得するにはどうすればよいですか?
もう一度もう一度チェックしてください。開始日29と終了日31。それは2つの結果を表示することがあります。
select *
from roomcalendar
where day between '2016-08-29' and '2016-08-31' and avaroom != 0
having count(*) = datediff('2016-08-31','2016-08-29')
ですが、結果は1つだけです。
どのようにすべてのテストに合格する正しいクエリを作成するには?
ありがとうございました。
なぜカウント(*)= datediff( '2016-08-31'、 '2016-08-29') 'を追加していますか?これは、datediff()の結果が返された行の数と同じ場合にのみ機能します。例では、1日の範囲を照会して1行を返すときです。その部分を省略してみてください! – derelict
@derelictはいbro。誰かが私に問題を解決するために与える。しかし、それは動作しません。私の要件のための新しいクエリのための任意のアイデア。ありがとう –
@MinKoKo:あなたは出力として正確に何をしたいですか?選択された日付の間に利用可能な部屋の総数または選択された日付の間の日付を持つ利用可能な部屋の数? –