Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Цикл с датами / 8 сообщений из 8, страница 1 из 1
03.03.2021, 10:19
    #40050153
STestS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
Здравствуйте.

Помогите решить задачу с перебором параметров в цикле.
Есть табличка с датами и значениями
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
value		datetime
778530593	2019-07-16 09:00:30.583
778808056	2019-07-16 09:05:08.057
779035029	2019-07-16 09:08:55.040
779482297	2019-07-16 09:16:22.330
779718789	2019-07-16 09:20:18.833
779725674	2019-07-16 09:20:25.717
787176545	2019-07-16 11:24:36.597
787182633	2019-07-16 11:24:42.683



Нужно найти количество записей в диапазоне от 10:00 до 22:00 и от 22:00 до 10:00 и это все от 16 числа 25 число...

Знаю как можно сделать первую часть но вот как менять дату в цикле не знаю...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @DateBegin datetime ;
DECLARE @DateEnd datetime ;

SET @DateBegin='2019-07-16 10:00:00';
SET @DateEnd  ='2019-07-16 22:00:00';

select count([Journal].[code]) as N, @DateBegin, @DateEnd
	from [Journal]
	where [datetime] BETWEEN @DateBegin and @DateEnd
...
Рейтинг: 0 / 0
03.03.2021, 11:13
    #40050175
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
declare @t table (value int, dt	datetime)
insert into @t values
 (778530593,	'2019-07-16 09:00:30.583')
,(778808056,	'2019-07-16 09:05:08.057')
,(779035029,	'2019-07-16 09:08:55.040')
,(779482297,	'2019-07-16 09:16:22.330')
,(779718789,	'2019-07-16 09:20:18.833')
,(779725674,	'2019-07-16 09:20:25.717')
,(787176545,	'2019-07-16 11:24:36.597')
,(787182633,	'2019-07-16 11:24:42.683')
,(787182633,	'2019-07-25 11:24:42.683')

-- ***
DECLARE @DateBegin datetime ;
DECLARE @DateEnd datetime ;

SET @DateBegin	='2019-07-15 22:00:00.000';
SET @DateEnd	='2019-07-25 22:00:00.000';

select 
	v.number
	,dt_start	=dateadd(hour, 12 * v.number, @DateBegin) 
	,dt_finish	=dateadd(hour, 12 * (v.number + 1), @DateBegin)
	,N			=count(a.value)
from spt_values v
outer apply (select * from @t t where t.dt >= dateadd(hour, 12 * v.number, @DateBegin) and t.dt < dateadd(hour, 12 * (v.number + 1), @DateBegin)) a
where v.type = 'P'
	and dateadd(hour, 12 * v.number, @DateBegin) < @DateEnd
group by 
	v.number


numberdt_startdt_finishN02019-07-15 22:00:00.0002019-07-16 10:00:00.000612019-07-16 10:00:00.0002019-07-16 22:00:00.000222019-07-16 22:00:00.0002019-07-17 10:00:00.000032019-07-17 10:00:00.0002019-07-17 22:00:00.000042019-07-17 22:00:00.0002019-07-18 10:00:00.000052019-07-18 10:00:00.0002019-07-18 22:00:00.000062019-07-18 22:00:00.0002019-07-19 10:00:00.000072019-07-19 10:00:00.0002019-07-19 22:00:00.000082019-07-19 22:00:00.0002019-07-20 10:00:00.000092019-07-20 10:00:00.0002019-07-20 22:00:00.0000102019-07-20 22:00:00.0002019-07-21 10:00:00.0000112019-07-21 10:00:00.0002019-07-21 22:00:00.0000122019-07-21 22:00:00.0002019-07-22 10:00:00.0000132019-07-22 10:00:00.0002019-07-22 22:00:00.0000142019-07-22 22:00:00.0002019-07-23 10:00:00.0000152019-07-23 10:00:00.0002019-07-23 22:00:00.0000162019-07-23 22:00:00.0002019-07-24 10:00:00.0000172019-07-24 10:00:00.0002019-07-24 22:00:00.0000182019-07-24 22:00:00.0002019-07-25 10:00:00.0000192019-07-25 10:00:00.0002019-07-25 22:00:00.0001
...
Рейтинг: 0 / 0
03.03.2021, 11:45
    #40050203
STestS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
court,

Спасибо за быстрый ответ.
у меня ошибки с v.number и v.type
Сообщение 207, уровень 16, состояние 1, строка 66
Invalid column name 'number'.
Сообщение 207, уровень 16, состояние 1, строка 67
Invalid column name 'type'.
...
Рейтинг: 0 / 0
03.03.2021, 11:47
    #40050208
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
Код: sql
1.
from master.dbo.spt_values v
...
Рейтинг: 0 / 0
03.03.2021, 11:48
    #40050211
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
STestS,

master..spt_values

пс
но, в целом, master. .spt_values- это т.с. "направление" :)
После чего у тебя должно появится "жуткое желание", завести в своей БД таблицу/функцию целых чисел
...
Рейтинг: 0 / 0
03.03.2021, 12:17
    #40050229
STestS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
court,

О такой таблице я не знал, спасибо! Подчитал и все получилось!

Данный код позволяет брать данные с интервалом в 12 часов. а если нужно с другим не кратным интервалом. например
с 08:00 по 16:00,
с 16:00 по 20:00 и
с 20:00 по 04:00 и
с 04:00 по 08:00 ? То есть с разницей в 8-м и 4-и часа...
...
Рейтинг: 0 / 0
03.03.2021, 12:27
    #40050233
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
STestS
Данный код позволяет брать данные с интервалом в 12 часов. а если нужно с другим не кратным интервалом. например
с 08:00 по 16:00,
с 16:00 по 20:00 и
с 20:00 по 04:00 и
с 04:00 по 08:00 ? То есть с разницей в 8-м и 4-и часа...

я б через рекурсию тогда бы делал ...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DECLARE @DateBegin datetime ;
DECLARE @DateEnd datetime ;

SET @DateBegin	='2019-07-15 08:00:00.000';
SET @DateEnd	='2019-07-25 20:00:00.000';

;with cte as (
	select @DateBegin as dt_start, dateadd(hour, case when datepart(hour, @DateBegin) in (8,20) then 8 else 4 end, @DateBegin) as dt_finish

	union all

	select
		cte.dt_finish as dt_start
		,dateadd(hour, case when datepart(hour, cte.dt_finish) in (8,20) then 8 else 4 end, cte.dt_finish) as dt_finish
	from cte
	where cte.dt_finish < @DateEnd
)
select * from cte 
...
Рейтинг: 0 / 0
03.03.2021, 14:21
    #40050318
STestS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл с датами
court,

боюсь я пока не могу осилить такое, по этому брал диапазон не по 12 часов а по 2 а потом сложил значения в нужном мне диапазоне))
Горбато но работает...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Цикл с датами / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]