0

このクエリを書くのに問題があります。

連続した月に出荷された現在の注文数を取得する必要があります。

例:現在の月が11月で、7月、8月、9月、10月、11月に注文した場合、そのユーザーには5が返されます。11月に注文しなかった場合、ストリークが壊れているため、0が返されます。

私が関わっているテーブルは、、、customerおよびorderですdate

4

2 に答える 2

0
Here you replace now and static date as per columnname :

select (case 
       when (month(now())=11 and 
            (month('2012-02-02')>=7 and month('2012-02-02')<=11)) 
       then 5 
       else
       0 end) as 'month'
       from tablename
于 2012-10-09T12:56:44.797 に答える
0

日付テーブルと顧客テーブルの間のクロス結合を使用して、すべての顧客/月の組み合わせの行を取得し、次にそれを注文テーブルに対して左結合して詳細を取得し、groupbyを使用してカウントを取得します。

このようなものですが、予約語である列名に対応するために変更する必要があります。

SELECT customer.name, month.name, COUNT(order.id)
FROM customer
CROSS JOIN date
LEFT OUTER JOIN order
ON customer.id = order.customer_id
AND MONTH(date.date) = MONTH(order.date)
WHERE date.date BETWEEN startofdaterange AND endofdaterange
GROUP BY customer.name, month.name

または、質問を読み間違えた場合、範囲内で毎月注文する場合は注文数をカウントする必要があり、月をスキップする場合は0が必要です(テストされていないため、タイプミスまたは2が必要になるため、テーブルが必要になります)テストするdef):-

SELECT name, CASE  WHEN MonthCount = MonthOrderCount THEN OrderCount ELSE 0 END AS ContinuousOrderMonths
FROM (
SELECT CustName, COUNT(MonthName) AS MonthCount, SUM(MonthOrderCount) AS OrderCount, SUM(CASE WHEN MonthOrderCount > 0 THEN 1 ELSE 0 END)
FROM (
SELECT customer.name AS CustName, month.name AS MonthName, COUNT(order.id) AS MonthOrderCount
FROM customer
CROSS JOIN date
LEFT OUTER JOIN order
ON customer.id = order.customer_id
AND MONTH(date.date) = MONTH(order.date)
WHERE date.date BETWEEN startofdaterange AND endofdaterange
GROUP BY customer.name, month.name )Sub1 ) Sub2
GROUP BY CustName

顧客のリストと1か月あたりの注文のコンマ区切りリストが必要な場合:-

SELECT CustName, GROUP_CONCAT(CAST(MonthsOrder AS CHAR))
FROM (
SELECT customer.name AS CustName, month.name, COUNT(order.id) AS MonthsOrder
FROM customer
CROSS JOIN date
LEFT OUTER JOIN order
ON customer.id = order.customer_id
AND MONTH(date.date) = MONTH(order.date)
WHERE date.date BETWEEN startofdaterange AND endofdaterange
GROUP BY customer.name, month.name) Sub1
GROUP BY CustName

これを展開して、それぞれの月の名前を取得し、注文を強制する必要がある場合があります

于 2012-10-09T12:57:28.397 に答える