У меня есть две таблицы, которые выглядят так:
_____________________
| UserID | UserName | --TableName = User
________________________________________________
| UserID | DateLoggedInOn | MinutesLoggedInFor | ---TableName = SessionInfo
Это отчет, и я должен позволить пользователю выбрать диапазон дат, который не будет иметь ограничений (сколько бы недель ни было)
В настоящее время отчет работает, указав дату начала, и тогда отчет будет получать данные только за неделю, начиная с даты начала.
Поэтому у меня есть запрос, подобный этому
Declare @Day1 datetime = @FromDateTime,
@Day2 datetime = DATEADD(DAY,1,@FromDateTime),
@Day3 datetime = DATEADD(DAY,2,@FromDateTime),
@Day4 Datetime = DATEADD(DAY,3,@FromDateTime),
@Day5 datetime = DATEADD(DAY,4,@FromDateTime),
@Day6 datetime = DATEADD(DAY,5,@FromDateTime),
@Day7 datetime = DATEADD(DAY,6,@FromDateTime)
SELECT UserID, username, (select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day1 and si.dateloggedinon <= @Day1 and si.UserID = u.userid) as Day1,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day2 and si.dateloggedinon <= @Day2 and si.UserID = u.userid) as Day2,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day3 and si.dateloggedinon <= @Day3 and si.UserID = u.userid) as Day3,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day4 and si.dateloggedinon <= @Day4 and si.UserID = u.userid) as Day4,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day5 and si.dateloggedinon <= @Day5 and si.UserID = u.userid) as Day5,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day6 and si.dateloggedinon <= @Day6 and si.UserID = u.userid) as Day6,
(select sum(minutesLoggedInfor) from SessionInfo si where si.dateloggedinon >= @Day7 and si.dateloggedinon <= @Day7 and si.UserID = u.userid) as Day7 from User u
Это уже довольно запутанно и кажется неправильным, но работает и дает мне необходимые данные.Я не знаю, как получить информацию за несколько недель, хотя.Так, чтобы он возвращал что-то подобноев Day1, Day2, Day3
.... будет только для этого «ReportingWeek
»
Я думал об использовании цикла while, но я слышал, что это не лучшая практика.