1

マイクエリ

SELECT RoomType, date FROM Superior WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM Deluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM SuperDeluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
ORDER BY date
HAVING COUNT(date, INTERVAL 3 DAY) 

' の近くで構文エラーを取得していますHAVING COUNT(date, INTERVAL 3 DAY)

私の目標は、日付とアベイルズが 3 日を超える部屋タイプの結果を取得することです

** スーペリアおよびデラックスの表では、2012 年 6 月 29 日の日付が Avail=0 で、SuperDeluxe の日付はすべて Avail です。

この場合、私の結果は SuperDeluxe を Availability としてのみ表示するはずですが、

**RoomType**    **date**
Superior        2012-06-26
Superior        2012-06-27
Superior        2012-06-28
Deluxe          2012-06-26
Deluxe          2012-06-27
Deluxe          2012-06-28
SuperDeluxe     2012-06-26
SuperDeluxe     2012-06-27
SuperDeluxe     2012-06-28
SuperDeluxe     2012-06-29

はい、それはMySQLです。私は、叔父を助けてこれを成し遂げることができることを自分自身に証明しようとしています. ご存知のように、私は初心者ではありません。ご想像のとおり、3 つのテーブルはすべてあいまいです。利用可能な部屋の数を追跡する別のフィールド Avail があります。予約が完了すると、利用可能な部屋が自動的に計算されます。

私の現在のクエリは、各クエリの部屋タイプの空室状況のみを生成できる部屋タイプのオプション選択を使用しています。上記では、1 つのクエリを使用して、日付範囲で利用可能な任意の部屋タイプを生成することを計画しました。上記のユニオン クエリを使用するときに発生する問題は、得られる結果に、可用性が = 0 である範囲内の日付の 1 つも含まれます。

私はこのようなことを試みていました

SELECT RoomType, COUNT( date )
FROM Superior
WHERE date >= '2012-06-26'
  AND date < '2012-06-30'
  AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM Deluxe
WHERE date >= '2012-06-26'
  AND date < '2012-06-30'
  AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM SuperDeluxe
WHERE date >= '2012-06-26'
  AND date < '2012-06-30'
  AND Avail > '0'
GROUP BY date
HAVING COUNT( 4 )

近づいているように見えます。MAX( date ) を試してみましたが、4 行の日付が表示されますが、Avail が 0 を超える部屋タイプの 1 行が表示されます

私も試してみました HAVING COUNT( DISTINCT date ) =4 結果はまだ4に等しくない行のフィールド日付を表示します

4

1 に答える 1

4

HAVING(グループをフィルタリングするために)でのみ機能しGROUP BYますが、グループは使用されていません。

各選択には簡単な句が必要であり、WHERE注文できるラッピング選択は次のとおりです。

select * from (
    SELECT RoomType, date 
    FROM Superior
    WHERE date >= '2012-06-26' 
    AND date < '2012-06-30'
    AND Avail > 3 -- specify avail range here
  UNION
    SELECT RoomType, date
    FROM Deluxe
    WHERE date >= '2012-06-26' 
    AND date < '2012-06-30'
    AND Avail > 3 -- specify avail range here
  UNION
    SELECT RoomType, date
    FROM SuperDeluxe
    WHERE date >= '2012-06-26' 
    AND date < '2012-06-30'
    AND Avail > 3 -- specify avail range here
) results
ORDER BY date

テーブルを増やすのではなく、データを1つのテーブルにマージし、3つの予約タイプを区別するための列を追加することを真剣に検討します。クエリが適切になるだけでなく、新しい予約タイプを取得するときに、別のテーブルを作成する必要はありません。

于 2012-06-29T06:59:42.173 に答える