0

使用する必要がある SQL クエリを見つけようとして、頭がぐるぐる回っています。さまざまなネストされたクエリと自己結合を試しましたが、すべてが失敗しています。私はそれを考えすぎていると思います。

基本的な考え方: 私は単一のテーブルを持っています。それを呼び出しましょう。テーブルOrderTableには 4 つの (関連する) フィールドがあります: OrderIdCustomerIdRestaurantIdOrderTime

顧客が注文すると、日時スタンプがOrderTimeフィールドに追加されます。他の 3 つのフィールドは単なる整数で、そのOrderIdフィールドが主キー (および自動インクリメント) です。

CustomerIdその顧客の最初のレコード (最も早い日付) が特定の日付 (たとえば、「2012-03-14」) であり、RestaurantId が特定の番号 (たとえば、29)。

現時点では、非常に複雑な方法であるとしか思えません。また、現在、サブクエリに一致するレコードが複数ある場合、「#1242 - サブクエリが複数の行を返します」というエラーが発生します。

よりエレガントなソリューションを手伝ってくれる人はいますか? ありがとう!

現在のクエリ:

SELECT `CustomerId` 
FROM `OrderTable` 
WHERE `OrderTime` LIKE '%2012-03-14%' 
AND `RestaurantId`='29' 
AND `OrderId`=(SELECT `OrderId` 
   FROM `OrderTable` 
   WHERE `RestaurantId`='29' 
   GROUP BY `CustomerId` 
   ORDER BY `OrderTime` ASC
   )
4

3 に答える 3

1

編集: John Totet Woo はおそらくこれについて正しかったでしょうが、LIKE 句を避けるために私の投稿の 2 番目の部分を参照してください :)

何を求めているのか少し混乱するかもしれませんが、サブクエリを '=' から IN に変更すると、求めているものが得られますか?

SELECT `CustomerId` 
FROM `OrderTable` 
WHERE `OrderTime` LIKE '%2012-03-14%' 
AND `RestaurantId`='29' 
AND `OrderId` IN (SELECT `OrderId` 
    FROM `OrderTable` 
    WHERE `RestaurantId`='29' 
    GROUP BY `CustomerId` 
    ORDER BY `OrderTime` ASC
) 

しかし、主に私を悩ませていたのは、あなたが使用できるということです

AND DATE(OrderTime) = '2012-03-14'

いいねの代わりに

于 2012-08-15T15:46:38.227 に答える
0

current は複数の値を返すことができます。符号はサブクエリから 1 つの値のみを必要とします。そのためには、キーワード=を使用してサブクエリの値を制限する必要があります。LIMIT

SELECT `CustomerId` 
FROM   `OrderTable` 
WHERE  `OrderTime` LIKE '%2012-03-14%' AND 
       `RestaurantId`='29' AND 
       `OrderId`= (
                     SELECT `OrderId` 
                     FROM `OrderTable` 
                     WHERE `RestaurantId`='29' 
                     ORDER BY `OrderTime` ASC
                     LIMIT 1
                  )

次の方法でも実行できます。

SELECT DISTINCT CustomerID
FROM OrderTable
WHERE OrderID IN
(
    SELECT  OrderID
    FROM    OrderTable 
    WHERE   RestaurantID = 29 AND
            DATE(OrderTime) = DATE(2012-03-14)
) b

すべての中で最も簡単な解決策はこれです:

    SELECT  DISTINCT CustomerID
    FROM    OrderTable 
    WHERE   RestaurantID = 29 AND
            DATE(OrderTime) = DATE(2012-03-14)
于 2012-08-15T15:42:43.500 に答える
0

私は混乱していると思います。このように、OrderTime とレストラン ID に一致するすべてのレコードを選択できないのはなぜですか?

SELECT * FROM OrderTable WHERE OrderTime = "2012-03-14" AND RestaurantID = "29";

それはあなたが望むリストをあなたに与えませんか?

于 2012-08-15T15:47:25.977 に答える