2

日付範囲 (各投稿の「星」の数) に基づいて、アプリケーションのアクティビティ レポートを取得しようとしています。

アカウント ID を含む投稿テーブルと、その ID をアカウントに関連付ける「アフィリエイト」テーブルがあります。

私はできることを知っています:

SELECT
posts.affid,
affiliates.name
sum(posts.stars) AS SEPT_2012
from posts
JOIN affiliates on posts.affid = affiliates.id
WHERE posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid

これにより、アフィリエイト ID、名前、および 9 月の総「星」を含む結果が得られます。1 か月

ただし、1 つのクエリ結果に表示される 8 月、7 月、6 月、5 月の数値を遡って取得するプルを実行したいと考えています (結果には、affid、name、SEPT_2012、AUG_2012、JUL_2012 が含まれます...等)。基本的に、これらの他の日付範囲のサブクエリを実行すると思います。

助言がありますか?ご協力いただきありがとうございます!

4

2 に答える 2

0

あなたはおそらくしたいでしょうGROUP BY EXTRACT(YEAR_MONTH FROM timestamp)(あなたがしたいことは何でも加えて)。もちろんSEPT_2012AUG_2012、 などの列は取得できませんが、データはそこにあります。

于 2012-10-02T13:27:18.887 に答える
0

列を動的に作成することはできませんが、列を「偽造」して、UNION日付範囲ごとに を使用できます。各 内で、他の日付列UNIONを選択し、正しい列を選択します。0SUM()

これに似たものが機能するはずです:

SELECT
    posts.affid,
    affiliates.name,
    sum(posts.stars) AS SEPT_2012,
    0 AS AUG_2012,
    0 AS JUL_2012
from
    posts
    JOIN affiliates on posts.affid = affiliates.id
WHERE
    posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid

UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        sum(posts.stars) AS AUG_2012,
        0 AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-08-01' AND '2012-09-01'
    group by affid
)
UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        0 AS AUG_2012,
        sum(posts.stars) AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-07-01' AND '2012-08-01'
    group by affid
)


UPDATE (それぞれのすべての結果を 1affidつの行に結合するため)

posts.affidコメントごとに、単一の行のそれぞれの結果を各列のすべてのデータと組み合わせたいと考えています。上記の完全なクエリの周りに外部クエリを配置してから、GROUP BY affid再度使用することでこれを実現できます。affidこれにより、要求に応じてすべての列ごとに 1 つの行が必要になります。上記のクエリを更新して、「より良い」出力0の代わりに空の列ごとに選択するようにしました。null

SELECT affid, name, SEPT_2012, AUG_2012, JUL_2012 FROM (
    ... full query above ...
) AS q
GROUP BY affid

アップデート

すべてのサブクエリからすべての「星」の合計を取得するには、外側の select ステートメントを次のように使用します。

  SELECT affid, name, sum(SEPT_2012), sum(AUG_2012), sum(JUL_2012) FROM (
    ... full query above ...
) AS q
GROUP BY affid
于 2012-10-02T13:31:24.400 に答える