powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пики вошедших в систему, разбитые по часам.
16 сообщений из 16, страница 1 из 1
Пики вошедших в систему, разбитые по часам.
    #39675462
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Утра доброго, господа.
Помогите пожалуйста.
Есть скрипт, суммирующий все действия пользователя за день.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT *
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время])), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p


Требуется посмотреть, сколько максимум действий за 1 час каждый день совершал пользователь (выборка из всего дня, но разбитая по часам, с 00:00 до 23:59)
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675475
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, было так (сколько действий за весь день):
Дата Юзер 1 Юзер 2 Юзер 318.июл 90 45 18017.июл 180 90 4516.июл 45 180 90

Стало так (Максимум действий за 1 час):
Дата Юзер 1 Юзер 2 Юзер 318.июл 10 5 2017.июл 20 10 516.июл 5 20 10
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675477
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mazay2142Требуется посмотреть, сколько максимум действий за 1 час каждый день совершал пользователь (выборка из всего дня, но разбитая по часам, с 00:00 до 23:59)Эээ, такой же запрос, но разбивать по часам, а не по дням. В чём проблема то?
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675482
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mazay2142,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT sum([Юзер 1]) as count1, max([Юзер 1]) as Max1
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время])), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675484
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

вот, не могу понять, как разбить и по часам (не выводя часы), и по дням (выводя дни), а из часов ещё максимальное кол-во действий вытащить
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675485
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по датам:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата])), 
sum([Юзер 1]) as count1, max([Юзер 1]) as Max1
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время])), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
Group by DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата]))
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675492
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KopellyЕсли по датам:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата])), 
sum([Юзер 1]) as count1, max([Юзер 1]) as Max1
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время])), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
Group by DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата]))



Пишет ошибку, что не знает такого столбца [Дата]
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675494
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но пишет только про 1ую строчку
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675505
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Column 'a.Дата' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
KopellyЕсли по датам:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата])), 
sum([Юзер 1]) as count1, max([Юзер 1]) as Max1
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время])), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
Group by DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата]))
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675525
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @t table (dt datetime, u varchar(10));

insert into @t
 (dt, u)
 select top(10000)
  dateadd(mi, row_number() over (order by (select 1)), '2018'), 'u' + cast(cast(rand(checksum(newid())) * 3 + 1 as int) as varchar(10))
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

select
 p.*
from
 (
  select cast(dt as date), u, count(*) over (partition by u, datediff(hour, '1900', dt)) from @t
 ) t(dt, u, cnt)
pivot
(
 max(cnt)
 for u in ([u1], [u2], [u3]) 
) p;
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675531
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата])), 
sum([Юзер 1]) as count1, max([Юзер 1]) as Max1,
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATETIMEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время]),0,0,0), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
Group by DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата]))
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675541
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работает, но работатет также, как изначальный скрипт... считает не по часам, а действий всего (хотя оставил только максимумы)
Считает максимум за день всего, а не за час...
6 столбец - я, за час я никак 138 действий не сделал в системеKopelly
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата])), 
sum([Юзер 1]) as count1, max([Юзер 1]) as Max1,
sum([Юзер 2]) as count2, max([Юзер 2]) as Max2,  
sum([Юзер 3]) as count3, max([Юзер 3]) as Max3
From (Select * 
FROM (
SELECT        
--Разбиваем все действия по дням
[Дата] = DATETIMEFROMPARTS(DATEPART(yy, [Время]), DATEPART(mm, [Время]), 	DATEPART(dd, [Время]), 	DATEPART(hh, [Время]),0,0,0), 
[Пользователь]
FROM            
[БД] dec) t 
PIVOT (
COUNT([Пользователь]) 
FOR [Пользователь] IN 
([Юзер 1], 
[Юзер 2], 
[Юзер 3])
) p) a
Group by DATEFROMPARTS(DATEPART(yy, [Дата]), DATEPART(mm, [Дата]), 	DATEPART(dd, [Дата]))
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675545
Mazay2142
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ничего непонятно, как это к задаче относится...
объясните пожалуйста и сопоставьте с поставленной задачейinvm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @t table (dt datetime, u varchar(10));

insert into @t
 (dt, u)
 select top(10000)
  dateadd(mi, row_number() over (order by (select 1)), '2018'), 'u' + cast(cast(rand(checksum(newid())) * 3 + 1 as int) as varchar(10))
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

select
 p.*
from
 (
  select cast(dt as date), u, count(*) over (partition by u, datediff(hour, '1900', dt)) from @t
 ) t(dt, u, cnt)
pivot
(
 max(cnt)
 for u in ([u1], [u2], [u3]) 
) p;
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675546
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mazay2142, В запросе:
sum([Юзер Х]) - общее кол-во за день (как в исходном запросе)
max([Юзер Х]) - максимальное за час в указанный день (то что хотел получить)
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675551
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mazay2142ничего непонятно, как это к задаче относится...
объясните пожалуйста и сопоставьте с поставленной задачей
Первая часть (declare .... и Insert into ....) - генерация данных для проверки
Вторая часть сам запрос, только для удобства написания ввели короткие наименования полей и таблицы:
@t ==> [БД]
dt ==> [Дата]
u ==> [Пользователь]
...
Рейтинг: 0 / 0
Пики вошедших в систему, разбитые по часам.
    #39675577
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mazay2142объясните пожалуйста и сопоставьте с поставленной задачейТ.е. 21580187 не вы писали?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пики вошедших в систему, разбитые по часам.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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