Sql 当您没有所有日期的值时。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你应该提到当你没有所有日期的值时会发生什么。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的

Sql 当您没有所有日期的值时。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你应该提到当你没有所有日期的值时会发生什么。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的,sql,tsql,Sql,Tsql,当您没有所有日期的值时。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你应该提到当你没有所有日期的值时会发生什么。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你一定要看看Gordon的答案。如果你每天都有条目,他的答案会好得多。如果你不知道,我实际上修改了它来计算开始日期和结束日期。你肯定应该看看戈登的答案。如果你每天都有条目,他的答案会好得多。如果没有,我实际上修改了它来计算开始日期和


当您没有所有日期的值时。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你应该提到当你没有所有日期的值时会发生什么。对于他来说,日期范围不总是3天可能不是问题。我已经将julien的答案标记为正确,但你的答案更简洁。你一定要看看Gordon的答案。如果你每天都有条目,他的答案会好得多。如果你不知道,我实际上修改了它来计算开始日期和结束日期。你肯定应该看看戈登的答案。如果你每天都有条目,他的答案会好得多。如果没有,我实际上修改了它来计算开始日期和结束日期。
EventId   ReportId   Date
60          4         11/24/2015
59          11        11/23/2015
58          6         11/22/2015
57          11        11/22/2015
56          9         11/21/2015
55          3         11/20/2015
54          5         11/20/2015
53          6         11/19/2015
52          5         11/19/2015 
51          4         11/18/2015
50          3         11/17/2015
49          9         11/16/2015
StartDate    EndDate     ReportsAccessed
11/22/2015   11/24/2015    4
11/19/2015   11/21/2015    5
11/16/2015   11/18/2015    3
DECLARE @t as TABLE(
id int identity(1,1),
reportId int,
dateAccess date)

DECLARE @NumberOfDays int=3;
Select StartDate, EndDate, COUNT(reportId) from 
(
    select *, 
        DATEADD(day, DATEDIFF(DAY, dateAccess, maxdate.maxdate)%@NumberOfDays, dateAccess) as EndDate,
        DATEADD(day, DATEDIFF(DAY, dateAccess, maxdate.maxdate)%@NumberOfDays-@NumberOfDays+1, dateAccess) as StartDate
    from @t, (select MAX(dateAccess) maxdate from @t t2) maxdate
) results
GROUP BY StartDate, EndDate
ORDER BY StartDate desc 
SELECT DateADD(day, -datediff(day, dateAccess, maxdate)/3*3, maxdate) as EndDate, 
       DateADD(day, (-datediff(day, dateAccess, maxdate)/3+1)*3, maxdate) as StartDate, 
       count(reportId)
from (select *, MAX(dateAccess) over() as maxdate from @t) t
GROUP BY datediff(day, dateAccess, maxdate)/3, maxdate
select min(date), max(date), count(*) as ReportsAccessed
from (select t.*, max(date) over () as maxd
      from table t
     ) t
group by (datediff(day, date, maxd) / 3)
order by min(date);
declare @c int = 3

;with minmax as(select min(date) as mind, max(date) as maxd from t),
tally as(select @c * (-1 + row_number() over(order by(select null))) as rn 
         from master..spt_values),
intervals as(select dateadd(dd, rn, mind) as f, dateadd(dd, rn + @c - 1, mind) t
             from tally t cross join minmax m where dateadd(dd, rn, mind) <= maxd)
select i.f as [from], i.t as [to], count(*) as reeports
from intervals i
join t on t.date >= i.f and t.date <= i.t
group by i.f, i.t