1

私はこのクエリを持っています:

SELECT count(*) from
(
SELECT custid, count(*) as OrderCount
FROM orderinfo
WHERE preparedate between '2011-06-01' and '2011-12-31'
GROUP by CUSTID
) COUNTDB
WHERE Ordercount > '20'

戻り値: 901 CustID's

私が実行した場合:

SELECT * from
(
SELECT custid, count(*) as OrderCount
FROM orderinfo
WHERE preparedate between '2011-06-01' and '2011-12-31'
GROUP by CUSTID
) COUNTDB
WHERE Ordercount > '20'

個々の CustID とその注文数のリストを返します。

custid OrderCount
1001   24
1010   30
1033   36

...

私が望んでいるのは、クエリから返されたこれらの顧客 ID のうち、後の日付範囲 (たとえば、「2012-06-01」と「2012-12-31」) に注文した顧客 ID の数を確認することです。

私の目標は次のとおりです。

これを別の方法で説明できるかどうか見てみましょう。

2011 年に 20 件を超える注文を行った CustID の総数を確認する必要があります (指定された日付範囲)。次に、2 番目のステップは、2012 年の同じ日付範囲に注文した SAME 顧客の数を確認することです。

4

3 に答える 3

3

あなたのスキーマは次のようになっていると思います:

OrderInfo ( CustId, PrepareDate )

(うーん、単純ですね?)

ですから、私の理解が正しければ、2 つの日付の間に注文し、かつ 20 件を超える注文をした顧客のリストが必要です。それはとても簡単です:

SELECT
    CustId,
    Count(*) AS OrderCount
FROM
    OrderInfo
WHERE
    PrepareDate BETWEEN '2012-06-01' and '2012-12-31'
GROUP BY
    CustId
HAVING
    OrderCount > 20
于 2013-06-29T01:08:18.223 に答える
0

これを別の方法で説明できるかどうか見てみましょう。2011 年に 20 件を超える注文を行った CustID の総数を確認する必要があります (指定された日付範囲)。次に、2 番目のステップは、同じ日の 2012 年の日付範囲に注文した SAME 顧客の数を確認することです @AlexandreP.Levasseur

これを試してください。また、あなたを助けようとするときにクエリをテストするための SQLFiddle を作成していただけると便利です!

SELECT
    CustId
FROM
    OrderInfo
WHERE
    PrepareDate BETWEEN '2012-06-01' and '2012-12-31' AND
    CustId IN 
        (SELECT
            DISTINCT CustId
        FROM
            OrderInfo
        WHERE
            PrepareDate BETWEEN '2011-06-01' and '2011-12-31'
        GROUP BY
            CustId
        HAVING
            Count(*) > 20)
于 2013-06-29T02:58:35.643 に答える