0

と の間には 1 対多の関係がcampaignsありcampaign statsます。キャンペーンの統計アイテムは、データベース内で 1 日のキャンペーンに対して最大 1 つのエントリを持つことができます。

したがって、2013 年 9 月 20 日から開始して、関連のない場所をDateTime.Now取得しますが、統計が欠落している実際の日付も取得したいと考えています。campaignscampaign stat

campaign nameたとえば、stat date(それがありません)を表示したいと思います。これに対する解決策を思い付くのに苦労していますが、このコードを書き始めました。

        var fromDate = new DateTime(2013, 9, 20);
        var toDate = DateTime.Now;
        var dates = Enumerable.Range(0, toDate.Subtract(fromDate).Days + 1)
            .Select(d => fromDate.AddDays(d));

        var a = from c in _db.Campaigns
            join s in _db.CampaignStats on c.Id equals s.CampaignId into s1
            from s in s1.DefaultIfEmpty()
            where s == null
            select new {c, s};

サンプル出力は次のようになります: (キャンペーン 1 には 2013 年 9 月 20 日と 2013 年 9 月 22 日の統計があります)

`Campaign 1 9/21/2013`
`Campaign 1 9/23/2013`
`Campaign 1 9/24/2013`
`...`

編集

Bob の回答を使用して、次の LINQ クエリを作成しました。

           (from counts in
                (from cal in _db.CalendarMonths
                 from c in _db.Campaigns
                 let statCount = (from s in _db.CampaignStats
                                  where s.CampaignId == c.Id
                                  where s.Date == cal.date
                                  group s by s.Id into s1
                                  select s1.Count()).FirstOrDefault()
                 select new
                        {
                            cal.date,
                            c.Id,
                            statCount
                        })
            where counts.statCount == 0
            select new
                   {
                       counts.Id,
                       counts.date,
                   });
4

1 に答える 1

1

再帰では醜いですが:

SELECT
    counts.CalDate,
    counts.CampaignId,
FROM
    (SELECT
         cal.[Date] as CalDate,
         c.CampaignId,
         (SELECT COUNT(*) FROM CampaignStats WHERE CampaignID = c.CampaignId AND StatDate = cal.[Date]) AS StatCount
    FROM 
    CalendarMonths cal, Campaigns c) counts
WHERE
    counts.StatCount = 0
于 2013-10-01T17:52:11.153 に答える