У меня есть очень конкретная статистика, от которой мне нужно получить информацию.
Это продолжение этого вопроса, который просто задает вопрос о 4 утра, теперь мне нужно добавить, что он былвторник
Как узнать, сколько часов 4 утра было между двумя датами в TSQL
Мне нужно выяснить, сколько вхождений определенного временидня в определенный день недели между двумя датами.
Например, мне нужно узнать, сколько 4 утра во вторник было между двумя датами.
КакНапример, следующее даст результат = 1, так как во вторник 1 вхождение в 4 часа утра
declare @date1 datetime = '2019-10-01 00:00:00.000';
declare @date2 datetime = '2019-10-02 00:00:00.000';
В качестве примера следующее даст результат = 0, так как вВторник
declare @date1 datetime = '2019-10-01 05:00:00.000';
declare @date2 datetime = '2019-10-02 00:00:00.000';
В качестве примера, следующее даст результат = 2, так как было 2 4 AMs
declare @date1 datetime = '2019-10-01 03:00:00.000';
declare @date2 datetime = '2019-10-08 05:00:00.000';
В качестве примера, следующее даст результат = 2 какбыло 2 4 утра, хотя они просто оВ 4:00 утра по вторникам с интервалом
declare @date1 datetime = '2019-10-01 04:00:00.000';
declare @date2 datetime = '2019-10-08 04:00:00.000';
У меня есть какой-то код, чтобы узнать Сколько дней недели между двумя датами и сколько 4 утра между двумя датами, но не вместе.
Вот код, который я пробовал, который работает для 3 из 4 моих тестов.
SET DATEFIRST 1
declare @HourOfDay int = 4
declare @tests table (
date1 datetime,
date2 datetime
)
INSERT INTO @tests VALUES
('2019-10-01 00:00:00.000', '2019-10-02 00:00:00.000'), -- returns 1 CORRECT
('2019-10-01 05:00:00.000', '2019-10-02 00:00:00.000'), -- returns 1 INCORRECT
('2019-10-01 03:00:00.000', '2019-10-08 05:00:00.000'), -- returns 2 CORRECT
('2019-10-01 04:00:00.000', '2019-10-08 04:00:00.000'); -- returns 2 CORRECT
select
date1,
date2,
DATEDIFF(DAY,DATEADD(SECOND,-1,DATEADD(HOUR, -1 * @HourOfDay, date1)),DATEADD(HOUR, -1 * @HourOfDay, date2)) / 7 + 1
from @tests