Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка без переменных / 2 сообщений из 2, страница 1 из 1
17.10.2018, 17:38
    #39719012
syavik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка без переменных
День добрый. Не могу одуплить как решить такую задачу:
Есть таблица с клиентами и некой датой
Есть таблица с активностями клиента
Каким образом не высчитывая по одному клиенту подсчитать сколько у него было активностей за последние 30 дней до даты последней активности из первой таблицы. По одному клиенту высчитывать очень долго получается.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @c table (id int, lastdate date)
insert into @c 
select 1, '20181001'
union all
select 3, '20180905'


declare @a table ( id int, activity date, idclient int)
insert into @a 
select 34, '20180605',3
union all
select 53, '20180405',3
...
Рейтинг: 0 / 0
17.10.2018, 19:01
    #39719062
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка без переменных
syavik,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
declare @c table (id int, lastdate date)
insert into @c 
select 1, '20181001'
union all
select 3, '20180905'


declare @a table ( id int, activity date, idclient int)
insert into @a 
select 34, '20180605',3
union all
select 53, '20180405',3
union all
select 777, '20180825',3


select C.id, C.lastdate, ClientActivity.Qty 
from @c C
	cross apply
	(
	 select count(*) from @a a where a.idclient=c.id AND a.activity>=DATEADD(dd,-30, c.lastdate)
	)ClientActivity(Qty)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка без переменных / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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