Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос с агрегированием и группировкой  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
помогите с запросом на T-SQL. Скину оплату на баланс телефона
Необходимо написать тестовый sql-запрос с подробной расшифровкой и несколькими вариантами.

структуру 3 таблиц и схему приложила
http://dropmefiles.com/fViXd
1 мар 17, 10:06    [20253252]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
скайп liderjob
1 мар 17, 11:01    [20253401]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
iiyama
Member

Откуда:
Сообщений: 642
Ольга Семенова,

Помогу бесплатно, если
1. Предоставите скрипты создания и заполнения таблиц
2. Обещаете не работать разработчиком на SQL
1 мар 17, 11:08    [20253423]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
iiyama,

автор
2. Обещаете не работать разработчиком на SQL

скажете на какую должность собеседование и зп :)
1 мар 17, 11:09    [20253428]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
Добрый Э - Эх
Guest
TaPaK,

может студентка с запаздалой сессией?
1 мар 17, 11:29    [20253490]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
это не мое тестовое задание. Я бы тогда хоть стерла эту фразу :)
1 мар 17, 11:29    [20253491]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
Добрый Э - Эх
Guest
iiyama,

да там скрипты создания и заполнения таблиц сложнее, чем задание.... если задание не осилила, то про скрипты можно даже и не мечтать...
1 мар 17, 11:30    [20253497]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
iiyama
Member

Откуда:
Сообщений: 642
Ольга Семенова,
Тяп ляп в продакшен

тестирование, оптимизация, и каверзные вопросы собеседующего на Вашей стороне, я умываю руки
declare @Bills table(id int identity(1,1) primary key, num nvarchar(50), bdate datetime, pdate datetime, cid int);
declare @Bill_content table(bcID int identity(1,1) primary key,bID int, product nvarchar(50),  tarif_name nvarchar(50), service_name nvarchar(50), tip smallint, cost money, payed money, cnt int);
declare @retail_packs table(rpID int identity(1,1) primary key, bcID int, since datetime, upto datetime);

insert into @Bills values 
	(N'Счет1', '20170101', NULL,1)
	,(N'Счет2', '20170101', NULL,1)
	,(N'Счет3', '20170101', '20170102',1)
	,(N'Счет4', '20170101', '20170102',2)
	,(N'Счет5', '20170101', '20170102',3)
	,(N'Счет6', '20170101', '20170102',4)


insert into @Bill_content values
	(1, N'Земля','Тариф1', NULL,NULL,1000, NULL,10)
	,(1, N'Воздух','Тариф1', NULL,NULL,1000, NULL,10)
	,(2, N'Земля','Тариф1', NULL,NULL,500, NULL,5)
	,(2, N'Огонь','Тариф1', NULL,NULL,500, NULL,5)
	,(3, N'Земля', NULL,'Контур-Экстерн',1, 1000, 1000,1)
	,(4, N'Земля', NULL,'Контур-Экстерн',1, 1000, 1000,1)
	,(5, N'Земля','Тариф1', NULL,NULL,1000, NULL,10)
	,(6, N'Эфир','Тариф2', NULL,NULL,1000, NULL,10)

insert into @retail_packs values(1,'20170201','20180201')
insert into @retail_packs values(7,'20170201','20180201')

;with Clients AS
(
 select Cid from @Bills group by cid
)
select C.cid, BillInfo.*
from Clients C
	OUTER APPLY
	(
		select top 1
			BC.bID
		from @retail_packs RP join @Bill_content BC ON RP.bcID=BC.bcID join @Bills B ON BC.bID=B.id
		where 1=1
		AND B.cid=C.cid
		AND RP.since<getdate() 
		AND RP.upto>getdate()
		AND BC.product=N'Земля'
		order by RP.upto DESC
	)EarthBill
	OUTER APPLY
	(
	select top 1
		BC.bID
	from @Bill_content BC join @Bills B ON BC.bID=B.id
	where 1=1
	AND B.cid=C.cid
	AND BC.service_name=N'Контур-Экстерн'
	AND BC.tip IN (1,2)
	order by B.pdate DESC
	)ConturServiceBill
	OUTER APPLY
	(
		select MAX(B.num) as Num, MAX(B.bdate) as bdate, MAX(B.pdate) as pdate, SUM(BC.cost) as Cost, SUM(BC.payed) as Payed
		from @Bills B join @Bill_content BC ON B.id=BC.bID
		where B.id = ISNULL(EarthBill.bID,ConturServiceBill.bID) 
		
	)BillInfo
1 мар 17, 12:16    [20253683]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iiyama,
вау... однако не классический SQL получился.... СПАСИБО
1 мар 17, 13:15    [20253892]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова
iiyama,
вау... однако не классический SQL получился.... СПАСИБО
Что такое "классический SQL"?
1 мар 17, 13:36    [20253986]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с агрегированием и группировкой  [new]
iiyama
Member

Откуда:
Сообщений: 642
Ольга Семенова,

Вы сначала добейтесь, чтобы запрос возвращал те данные, которые нужны по ТЗ.

А потом перепишите запрос более оптимально

PS. Не зачто, надеюсь я вам не оказал медвежью услугу
1 мар 17, 13:40    [20254005]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить