【问题标题】:I want the count of records with no values existing我想要不存在值的记录数
【发布时间】:2018-03-08 11:29:47
【问题描述】:

我附上了这些结果,我想要的只是没有计数的天数、小时数和天数记录。

谢谢下面是我使用的查询

SELECT dateadd(hour, datediff(hour, 0, date_sent_to_adobe), 0) as TimeStampHour, Count(*) 'Total Count this Hour'
FROM [Publication_Data_Management].[AdobeExtract].[Membership_Detail]
GROUP BY dateadd(hour, datediff(hour, 0, date_sent_to_adobe), 0)
ORDER BY dateadd(hour, datediff(hour, 0, date_sent_to_adobe), 0) desc

是不是因为查询的编写方式只会在表中显示日期,我如何重写查询以显示没有记录计数的每小时的天数。见附图。

【问题讨论】:

  • 我使用的是 sql server 2014
  • 创建一个包含所有可能值的帮助日历表。与该表右连接。
  • 只是为了补充@jarlh 的评论,这就是所谓的“孤岛和差距”问题,在这种情况下,日历表(它本身非常有用)将帮助您解决这个问题.

标签: sql sql-server


【解决方案1】:

您可以生成所有行,然后使用left joingroup by 来引入行。这是一种方法:

SELECT DATEADD(hour, h.hr, d.dte) as TimeStampHour,
       Count(*) as total_count
FROM (SELECT DISTINCT CAST(date_sent_to_adobe as DATE) as dte
      FROM Publication_Data_Management.AdobeExtract.Membership_Detail
     ) d CROSS JOIN
     (VALUE (0), (1), (2), . . ., (23) ) as h(hr) LEFT JOIN
     Publication_Data_Management.AdobeExtract.Membership_Detail md
     ON md.date_sent_to_adobe >= DATEADD(hour, h.hr, d.dte) AND
        md.date_sent_to_adobe < DATEADD(hour, h.hr + 1, d.dte)
GROUP BY DATEADD(hour, h.hr, d.dte)
ORDER BY DATEADD(hour, h.hr, d.dte) DESC;

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2021-10-15
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2013-05-21
    • 2018-08-26
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多