2012-03-08 8 views
0

私は予約のテーブルを持っています。私は、指定されたチェックイン日付とチェックアウト日付から開始して、毎日どのように多くの予約が発生したのかをカウントしたいと思います。例えば。チェックイン日には、2012年10月6日だった場合は、日付をチェックアウト14-06-2012だった私は、私はこの作業を取得するために苦労しています。この指定された日付のセットの間の予約数をカウントする

Date   Bookings 
10-06-2012 1 
11-06-2012 1 
12-06-2012 2 
13-06-2012 4 
14-06-2012 3 

のようなテーブルが必要です。チェックイン日とチェックアウト日の間の各日付については、日付間の予約はカウントできません。

+1

SELECT COUNT(予約)FROMテーブルWHERE DATE [日付構文間] GROUP BY日付 'を実行してください。ここでのキーは 'GROUP BY'節と' COUNT() 'です。これらは合わせて、毎日の予約数をカウントします。 – Bojangles

答えて

0

ご質問がわかりません。問合せは、下記の前提としています

  • あなたbookingsの表は、(少なくとも)列datecheckincheckoutを持っています。
  • checkin >= 10-06-2012checkout <= 14-06-2012の予約を探しています。ここで

クエリです:

SELECT date, COUNT(*) 
FROM bookings 
WHERE checkin >= '2012-06-10' AND checkout <= '2012-06-14' 
GROUP BY date 
0

は、日付範囲の間の合計の予約を見つけることがSUM()を使用してください。

以下は試してみてください:あなたが必要

SELECT Date,SUM(Bookings) 
FROM tablename 
WHERE Date between 'startdate' AND 'enddate' 
GROUP BY Date 
0

まず最初は、一日一日の日付の表です。さて、mysqlは私のものではないので、できる限りやっていることについて多くの情報を書き留めようとします。これらの例を修正してください。

日付のテーブルは、最後の予約日をチェックし、欠落した日付を日付の表に追加するジョブによって準備される場合があります。これがあなたが受け入れるものでなければ、他の解決策はテーブルを動的に作成することですが、いくつかの危険があります。私の知る限りでは、このようなテーブルを作成する方法はありませんが、あなたはあなたの予約テーブルから明確な日付を選択することで、事実上、作業代理を行うと、クエリ自体で行われた日のテーブルでこれに参加渡ることができます。

((select distinct checkIn from bookings union select distinct checkOut from bookings) 
cross join (select 0 union select 1 union select 2 ...)) 

日のリストには、チェックイン日と各チェックインとチェックアウト日の間の最大の差異が含まれている必要があります。これは、あなたが目を保つ必要があるか、単にリストを十分に大きくする、例えば百日間にする必要があるものです。

ここで日付の表があるので、この日付と一致する予約を数えなければなりません。完全なクエリは、次のようになります。

select tableOfDates.date, count(bookings.checkIn) bookings 
from 
(
    (
    select distinct dates.date + INTERVAL days.day DAY -- OR HOWEVER you add days in mysql 
     from 
     (select distinct checkIn date from bookings union select distinct checkOut from bookings) dates 
     cross join (select 0 day union select 1 union select 2 union 3 union 4 union 5 union 6 union 7) days 
    ) 
) tableOfDates 
left join bookings 
    on tableOfDates.date between bookings.checkIn and bookings.checkOut 
where tableOfDates.date between [YOUR DATE RANGE] 
関連する問題