powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Цикл с датами
8 сообщений из 8, страница 1 из 1
Цикл с датами
    #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
Цикл с датами
    #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
Цикл с датами
    #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
Цикл с датами
    #40050208
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
from master.dbo.spt_values v
...
Рейтинг: 0 / 0
Цикл с датами
    #40050211
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

master..spt_values

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

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

Данный код позволяет брать данные с интервалом в 12 часов. а если нужно с другим не кратным интервалом. например
с 08:00 по 16:00,
с 16:00 по 20:00 и
с 20:00 по 04:00 и
с 04:00 по 08:00 ? То есть с разницей в 8-м и 4-и часа...
...
Рейтинг: 0 / 0
Цикл с датами
    #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
Цикл с датами
    #40050318
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

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


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