2

OK、2 つの列を非常にうまくグループ化する次のクエリがあります。

SELECT search_query_keyword, search_query_date, COUNT(1) as count
            FROM search_queries 
            WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
            GROUP BY search_query_keyword, search_query_date
            ORDER BY count DESC
            LIMIT 10

しかし、日付だけでなく日付 RANGE でグループ化したい場合はどうすればよいでしょうか? それを行う方法はありますか?

ありがとう!

編集:これらの答えはかなり複雑で、私が望むものはずっと簡単に達成できると思うので、もう一度説明させてください。たとえば、期間 ">= 20090601 AND <= 20090604" のキーワードを選択したいとします。しかし、繰り返されるキーワードを取得する代わりに、キーワードのオンスとそれが何回発生したかだけを取得したいと思います。たとえば、これの代わりに:

keyword: foo
keyword: foo
keyword: foo
keyword: bar
keyword: bar

私は得るでしょう:

keyword: foo, count: 3
keyword: bar, count: 2
4

3 に答える 3

3

日付範囲のグループ化については正確にはわかりません-必要な日付範囲を定義する必要があり、それらのクエリを UNION することができます。

SELECT 
    'Range 1' AS 'date_range',
    search_query_keyword
FROM search_queries
WHERE search_query_date >= '.$fromRange1.' AND search_query_date <= '.$toRange1.'
UNION
SELECT 
    'Range 2' AS 'date_range',
    search_query_keyword
FROM search_queries
WHERE search_query_date >= '.$fromRange2.' AND search_query_date <= '.$toRange2.'
GROUP BY 1,2

または、「30日、60日など」のように何日経過したかのグループにそれらを入れたい場合は、次のようにすることができます:

SELECT 
    (DATEDIFF(search_query_date, NOW()) / 30) AS date_group,
    search_query_keyword
FROM search_queries
GROUP BY date_group, search_query_keyword

編集:あなたが提供した詳細情報に基づいて、このクエリはあなたが望むものを生成するはずです:

SELECT 
    search_query_keyword,
    COUNT(search_query_keyword) AS keyword_count
FROM search_queries
WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
GROUP BY search_query_keyword
于 2009-06-04T18:14:20.643 に答える
2

CASE ステートメントまたは関数の結果でグループ化できます。例えば:

SELECT search_query_keyword, QUARTER(search_query_date), COUNT(1) as count
FROM search_queries 
WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
GROUP BY search_query_keyword, QUARTER(search_query_date)
ORDER BY count DESC
于 2009-06-04T17:52:00.727 に答える
0

さまざまな DATE ベースの関数を調べて、それに基づいて構築します。

select  YEAR( of your date ) + MONTH( of your date ) as ByYrMonth

ただし、上記の場合の結果は、2009 年 + 1 月 (月 1) = 2010 が誤って 2008 + 2 月 (月 2) = 2010 などとグループ化されるのを防ぐために、文字に変換する必要があります。文字列は終了する必要があります。次のようになります。

...
200811
200812
200901
200902
200903
...

カレンダー四半期で必要な場合は、(月 -1) を 4 で割った整数を実行する必要があります。

Jan (-1) = 0 / 4 = 0
Feb (-1) = 1 / 4 = 0
Mar (-1) = 2 / 4 = 0
Apr (-1) = 3 / 4 = 0
May (-1) = 4 / 4 = 1
June (-1)= 5 / 4 = 1 ... etc...

はい、前の例では、より適切に処理する QUARTER() 関数を明示的に参照していますが、30 日、60 日、90 日などのエイジングに基づいて行う場合は、上記の同様の計算を適用して、グループを 30 で割ることができます。

于 2009-06-04T18:32:17.650 に答える