2016-05-11 19 views
0

最後の8日間の列名 'adsource'の値によって決定される2〜3種類のエントリの数を取得しようとしています。これまでは1つのタイプのみを取得して結果に追加することができました。データベースMySql。私は今取得しています1日に複数のCOUNTを1つのクエリに含めるにはどうすればよいですか?

結果(一種類のみ):私は後だ

days_ago  monthday  type1 
--------------------------------- 
1   2016-05-11  2 
2   2016-05-10  34 
3   2016-05-09  11 
4   2016-05-08  1 
5   2016-05-07  0 
6   2016-05-06  16 
7   2016-05-05  42 
8   2016-05-04  76 

結果 - > 2-3タイプ(adsource列):

monthday  type1  type2 
----------------------------------------- 
2016-05-11  1   2 
2016-05-10  6   0 
2016-05-09  6   6 
2016-05-08  1   65 
2016-05-07  4   23 
2016-05-06  1   12 
2016-05-05  3   9 
2016-05-04  6   11   

最初の列days_agoは必要ありませんが、表示から削除する方法はわかりません。

adsource = 9 as type1 
adsource = 12 as type2 
adsource = 3 as type3 

これは私が使用しているクエリです:私は結果に表示できるようにする必要があり

SELECT * 
FROM (
SELECT DATEDIFF(NOW(), edate) AS days_ago, DATE(edate) AS monthday, 
COUNT(DISTINCT entries.email) AS type1 
FROM entries 
WHERE iplocation = 'mx' AND adsource = 9 
GROUP BY DATE(edate)) AS temp 
WHERE days_ago <= 8 
GROUP BY monthday 
ORDER BY monthday DESC 

はあなたが持つかもしれない任意の入力いただき、ありがとうございます:)

答えて

2

はこのような何かを試してみてください。..

SELECT * 
FROM (
SELECT DATEDIFF(NOW(), edate) AS days_ago, DATE(edate) AS monthday, 
COUNT(DISTINCT (case when adsource=9 then entries.email end)) AS type1, 
COUNT(DISTINCT (case when adsource=12 then entries.email end)) AS type2, 
COUNT(DISTINCT (case when adsource=3 then entries.email end)) AS type3 
FROM entries 
WHERE iplocation = 'mx' 
GROUP BY DATE(edate)) AS temp 
WHERE days_ago <= 8 
GROUP BY monthday 
ORDER BY monthday DESC 
+0

これは素晴らしいです!魅力のように動作し、私が必要としていたものを正確に。ありがとうございました。私は降りて、私のSQLブックレットを読み続けなければならない;) – Codex73

1

いただきました2列目?ただ、照会することを追加します。

SELECT DATE(edate) AS monthday, COUNT(DISTINCT entries.email) AS type1, COUNT(DISTINCT entries.type2) AS type2 
FROM entries 
WHERE iplocation = 'mx' AND adsource = 9 AND DATEDIFF(DATE(edate), now())  BETWEEN 0 and 7 
GROUP BY DATE(edate)) AS temp 
+0

選択する第2列はありません。カウントはadsource値に向かっていく。たとえば、私のクエリはadsource 9をtype1としてカウントします。より多くのadsourcesを追加する必要があります。これは理にかなっていますか? – Codex73

+0

の代わりにadsourceを 'where'に追加するのではなく、' group by'に追加して、日付、adsource、行を数えてから別々に解析することができます。いくつの広告ソースがいくつありますか? – Dan

+0

広告ソースは10個ほどありますが、実際には2-3個程度必要です。 – Codex73

1

私はあなたが使用しているどのデータベースわからないが、これは任意のデータベースにトリックを行う必要があります。

SELECT A.monthday, A.type1, B.type2 FROM 
    (SELECT DATE(edate) as monthday, COUNT(type1) AS type1 
    FROM entries 
    WHERE iplocation = 'mx' AND adsource = 9 AND DATEDIFF(DATE(edate), now()) BETWEEN 0 AND 7 
    GROUP BY DATE(edate)) AS A 
    (SELECT DATE(edate) as monthday, COUNT(type2) AS type2 
    FROM entries 
    WHERE iplocation = 'mx' AND adsource = 12 AND DATEDIFF(DATE(edate), now()) BETWEEN 0 AND 7 
    GROUP BY DATE(edate)) AS B 
WHERE A.monthday = B.monthday 

これにより、複数の異なる条件を使用してカウントすることができます。

関連する問題