2

特定の月に顧客になった顧客 ID をフィルター処理する where 句に基づいて、必要な行を返す SQL ステートメントがあります。私がする必要があるのは、これを過去 40 か月間毎月実行することですが、現在これは SQL を 40 回実行し、日付フィルターを変更することを意味します。

このクエリを実行するストアが 50 あるため、SQL で日付をフィルター処理するのではなく、この情報をグループ化する方法を知っている人はいますか?

私のSQLがあります:

select count(customerID), date_format(date_time, '%b %Y'), actionID
from transactions

where   date_time = (select min(date_time) 
        from transactions as T 
        where actionID=2
        and date_time > '2010-07-01 00:00:00'
        and  T.customerID = transactions.customerID)
        and store_id= 1

and     customerID IN 
        (
        SELECT customerID
        FROM    transactions
        where   store_id = 1
        and     actionID in (1,6)
            and date_time > '2010-07-01 00:00:00' 
        and     date_time < '2010-08-01 00:00:00'
        )


group by date_format(date_time, '%b %Y')
order by  date_time 

現在「2010-07-01 00:00:00」をフィルタリングしている日付は、フィルタリングではなくグループ化する必要があるため、2009 年 7 月から 2012 年 10 月までの各月の値を取得します。

どんな助けでも大歓迎です。

ありがとう、よろしくリチャード

4

1 に答える 1

0

あなたはすでに自分が何を必要としているのかを正確に知っているようです。date_time を月に切り捨てる列が必要な場合は、その列でグループ化します。

datetime を月初に切り詰めることはそれほど難しくありません。

SELECT CAST(CONVERT(VARCHAR(7), date_time, 120) + '-1' as DATETIME)

したがって、上記の日付変換を行う最初のクエリが必要になるか、それを行うテーブルに計算列を追加してから、この「月の最初」の列でグループ化します。

于 2012-11-20T12:14:53.483 に答える