如何按日期查询不存在的项目

本文关键字:项目 不存在 查询 何按 日期 | 更新日期: 2023-09-27 18:33:21

我在campaignscampaign stats之间有一对多的关系。一个市场活动统计信息项在数据库中最多可以有一个条目用于一天的市场活动。

所以从 9 年 20 月 13 日 - DateTime.Now得到没有相关campaign stat campaigns,但我也想获得统计数据缺失的实际日期

我想显示例如campaign namestat 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,
                   });

如何按日期查询不存在的项目

归很丑陋,但是:

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
相关文章: