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