2017-03-16 8 views
0

これは私のテーブルです。SQlで指定期間から予約を選択する方法

post_id  meta_key  meta_value 
-------- --------  ---------- 
10   booking_from 2017-01-20 
10   booking_to  2017-01-25 
11   booking_from 2017-02-20 
11   booking_to  2017-02-25 

2017-01-22から2017-01-26までのpost_idを選択するにはどうすれば予約できますか?現在私はこの日に予約しています。

私が指定した日付の期間は、SQLクエリ

+0

あなたが見ている結果を共有することはできますか? – Naincy

答えて

1

一つのアプローチを使用して予約がpost_idして、テーブルの上に集約し、booking_from日付が'2017-01-22'日以前にすることを確認するためにチェックすることで、booking_toた場合迎えたいです日付は'2017-01-26'以降である必要があります。ここでのトリックは、MIN()MAX()を使用して、日付の予約を特定することです。

SELECT post_id 
FROM yourTable 
GROUP BY post_id 
HAVING MIN(meta_value) <= '2017-01-22' AND 
     MAX(meta_value) >= '2017-01-26' 

これは、範囲全体が予約で完全にカバーされているかどうかをチェックします。その代わり場合は、既存の予約がこの範囲に全く重なって、私たちは少し次にクエリを変更できるかどうかを確認したい:ここ

SELECT post_id 
FROM yourTable 
GROUP BY post_id 
HAVING MIN(meta_value) BETWEEN '2017-01-22' AND '2017-01-26' OR 
     MAX(meta_value) BETWEEN '2017-01-22' AND '2017-01-26' 

は、2番目のクエリのためのデモです:

Rextester

関連する問題