powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти частоту запросов
6 сообщений из 6, страница 1 из 1
Найти частоту запросов
    #39920815
Marina1991.07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте)
Стоит такая задача
Компания создана с 2010 года и клиенты закупают продукцию, кто то раз в год, кто-то два. Так вот, надо найти частоту обращений по каждому клиенту.
Например, между первым и вторым заказом прошло три месяца, а между вторым и третьим 15 месяцев. Итог: (15+3)/2=9
Как такое реализовать, подскажите, пожалуйста
...
Рейтинг: 0 / 0
Найти частоту запросов
    #39920857
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina1991.07,
https://rextester.com/VYBJR87370
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @x as table([customer]tinyint,[order]tinyint,[date]date)
insert into @x select[customer],[order],[date]from(values
(02,19,cast(cast(20190305 as varchar(10))as date)),
(15,23,cast(cast(20110705 as varchar(10))as date)),
(15,31,cast(cast(20110821 as varchar(10))as date)),
(99,35,cast(cast(20121130 as varchar(10))as date)),
(99,40,cast(cast(20130112 as varchar(10))as date)),
(99,44,cast(cast(20131202 as varchar(10))as date))
)a([customer],[order],[date])
select[customer],[order],[date]from @x
declare @y as table([customer]tinyint,[z]smallint)
insert into @y
select[customer],datediff(dd,[date],lead([date])over(partition by[customer]order by[date],[order]))z from @x
select[customer],[z]from @y order by 1
select[customer],avg(z)av from @y group by[customer]order by 1
...
Рейтинг: 0 / 0
Найти частоту запросов
    #39921646
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Marina1991.07,

Код: 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.
-- Тестовые данные
WITH a(customer_id, dt) AS (
    SELECT 2, CONVERT(DATETIME, '20190305 16:11:00') UNION ALL 
    SELECT 15,'20110705 10:11:00'	  UNION ALL 
    SELECT 15,'20110821 2:15:00'	  UNION ALL 
    SELECT 17,'20180803 2:15:00'	  UNION ALL 
    SELECT 17,'20191103 2:15:00'	  UNION ALL 
    SELECT 99,'20121130 16:10:00'	  UNION ALL 
    SELECT 99,'20130112 12:59:00'	  UNION ALL 
    SELECT 99,'20131202 17:08:00'
), 
-- Решение
b AS (
SELECT 
       a.customer_id
     , DATEDIFF(MONTH, a.dt, ISNULL(LEAD(dt) OVER(PARTITION BY customer_id ORDER BY dt), GETDATE())) AS months
FROM 
     a
	) 
SELECT 
       b.customer_id
     , CONCAT('1 раз в  ', SUM(b.months) / COUNT(*), ' мес.') AS [Частота] 
FROM 
     b 
 GROUP BY 
         b.customer_id;



Код: sql
1.
2.
3.
4.
5.
6.
customer_id Частота
----------- --------------------------
2           1 раз в  11 мес.
15          1 раз в  51 мес.
17          1 раз в  9 мес.
99          1 раз в  29 мес.
...
Рейтинг: 0 / 0
Найти частоту запросов
    #39921735
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint,
Код: sql
1.
, DATEDIFF(MONTH, a.dt, LEAD(dt, 1, GETDATE()) OVER(PARTITION BY customer_id ORDER BY dt)) AS months
...
Рейтинг: 0 / 0
Найти частоту запросов
    #39921776
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nullin
entrypoint,
Код: sql
1.
, DATEDIFF(MONTH, a.dt, LEAD(dt, 1, GETDATE()) OVER(PARTITION BY customer_id ORDER BY dt)) AS months



?
...
Рейтинг: 0 / 0
Найти частоту запросов
    #39921779
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint, isnull() лишний.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Найти частоту запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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