0

次の列を持つa_ad_displayとして1つのテーブル名があります

displayId | campaignId | displaytime(date)

1          |    2      | 2012-12-19 12:41:08
2          |    2      | 2012-12-19 01:41:08
3          |    1      | 2012-12-20 10:41:08
4          |    1      | 2012-12-20 02:41:08
5          |    1      | 2012-12-21 12:41:08
6          |    2      | 2012-12-21 01:41:08
7          |    1      | 2012-12-21 12:41:08
8          |    1      | 2012-12-21 02:41:08

同じcampaignIdを持つ複数のエントリがあります。まず、a_ad_displayでカウントが最も多いcampaignIdをフェッチし、そのcampaignIdについて、日付内のカウントの総数を取得します。

例:上記の表から、行数が最も多い1つの番号campaignIdがあります

したがって、1つの番号のcampaignIdについて、このようなレコードを表示したいと思います。

        **Date**     | **countPerDay**
 2012-12-19          |      0
 2012-12-20          |      2
 2012-12-21          |      3

mysqlデータベースでこれをどのように達成できますか...誰かが私を導くことができることを願っています...

4

4 に答える 4

3

このクエリを使用できます

select 
    count(campaignId) as TCount,
    DATE(displayTime) as `Date`
from a_ad_display
where campaignId = 1
group by DATE(displayTime)

0は表示されませんが。

編集 :

OK これは変更され、結果が取得されます。

select
  date(a.displayTime) as `DisplayTime`,
  ifnull(l.TCount,0) as TCount
from a_ad_display as a
  left join (select
           count(campaignId) as TCount,
           displayTime
         from a_ad_display
         where campaignId = 1
         group by DATE(displayTime)) as l
    on date(a.displayTime) = date(l.displayTime)
group by DATE(a.displayTime)

デモ

その他の編集:

select
  date(a.displayTime) as `DisplayTime`,
  ifnull(l.TCount,0) as TCount
from a_ad_display as a
  left join (select
           count(campaignId) as TCount,
           displayTime
         from a_ad_display
         where campaignId = 1
         group by DATE(displayTime)) as l
    on date(a.displayTime) = date(l.displayTime)
group by DATE(a.displayTime)
order by a.displaytime desc limit 5

これで、最新の 5 つのレコードを選択できます。最新のキャンペーンを選択したい場合は、1 の代わりにサブクエリを使用できます。このクエリを見てください。

select
  date(a.displayTime) as `DisplayTime`,
  ifnull(l.TCount,0) as TCount
from a_ad_display as a
  left join (select
       count(campaignId) as TCount,
       displayTime
     from a_ad_display
     where campaignId = (select  campaignId from a_ad_display group by campaignId order by count(campaignId) desc limit 1)
     group by DATE(displayTime)) as l
    on date(a.displayTime) = date(l.displayTime)
group by DATE(a.displayTime)

編集:

クエリを編集しました。これにより、より高いオカレンスのキャンペーン ID が取得され、それに応じて結果が取得されます

デモ

于 2013-02-13T06:20:47.437 に答える
2

これは0も表示します

 select 
       sum(case when campaignId = @inputCompainid then 1 else 0 end) as TCount, 
        DATE(displayTime) as `Date`
    from a_ad_display
    group by DATE(displayTime)
于 2013-02-13T06:27:39.217 に答える
1

次のクエリは、各キャンペーン ID のレコードのリストを提供します

select campaignId,date(displaytime) as Date,count(*) as countPerDay from a_ad_display group by campaignId,date(displaytime);

特定のキャンペーン ID が必要な場合は、次を使用します。

select campaignId,date(displaytime) as Date,count(*) as countPerDay from a_ad_display group by campaignId,date(displaytime) having campaignId=1;
于 2013-02-13T06:22:50.587 に答える