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

Откуда:
Сообщений: 1
Помогите пожалуйста) требуется создать базу детализаций нескольких операторов связи в Microsoft SQL Server 2005, таблицы должны содержать следующие поля (дата, номер звонившего, номер на который осуществлялся вызов, тип исх.вызова (исх/внутри сети, исх/другая сеть, исх/межгород), продолжительность, стоимость разговора, стоимость 1 мин разговора.
Запрос: Найти оптимального оператора, с min стоимость разговора за 1 мин, при тех или иных типах исх.вызовах
Подскажите, можно ли свзять данные таблиц по номеру звонившего?
И как стоит сформулировать запрос?
18 май 14, 05:39    [16032278]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы данных детализаций  [new]
VSVLAD
Member

Откуда: Краснодар
Сообщений: 1391
nutochka,

Я так полагаю что будут разные таблицы под каждого оператора. Так как в исходной таблицы нет полей указывающих о том каким оператором воспользовался абонент. А вы хотите ориентироваться на "7928", "7918" на эти префиксы? В рамках школьной задачи вполне можно использовать, а вообще, в связи с MNP, однозначно по префику определить не получится, нужны доп поля указывающие к какому оператору относится тот или иной номер.
18 май 14, 10:01    [16032415]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы данных детализаций  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
VSVLAD
nutochka,

Я так полагаю что будут разные таблицы под каждого оператора. Так как в исходной таблицы нет полей указывающих о том каким оператором воспользовался абонент. А вы хотите ориентироваться на "7928", "7918" на эти префиксы? В рамках школьной задачи вполне можно использовать, а вообще, в связи с MNP, однозначно по префику определить не получится, нужны доп поля указывающие к какому оператору относится тот или иной номер.


Нафига городить разные таблицы? Справочник операторов -> ID оператора в общей табличке.
18 май 14, 16:27    [16032872]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы данных детализаций  [new]
vikkiv
Member

Откуда: EU
Сообщений: 2941
nutochka, к сожалению насчёт нюансов 2005-го не в курсе и под рукой только SQL2014, на нём прекрастно работает вот такое:
create table operators(op_id int identity(0,1)primary key,opname varchar(64))
insert into operators(opname)values('default operator'),('O2'),('BT'),('Sky'),('Tele2'),('T-Mobile')
create table customers(cust_id int identity(0,1)primary key,cname varchar(64))
insert into customers(cname)values('default customer'),('MyHome'),('MyWork'),('Kolyan'),('Vovka'),('Kisa')
create table calltypes(tp_id int identity(0,1)primary key,tpname varchar(64))
insert into calltypes(tpname)values('default call type'),('local network'),('other network'),('international')
create table calls(c_id bigint identity(1,1)primary key,callerid varchar(64)not null default'',destination varchar(64)not null default'',op_id int not null default 0 foreign key references operators(op_id)/*operator id*/,cust_id int not null default 0 foreign key references customers(cust_id)/*customer id*/,tp_id int not null default 0 foreign key references calltypes(tp_id)/*call type*/,rate decimal(7,5) not null default 0/*rate per sec*/,date date not null default getdate(),duration int not null default 0/*seconds*/,cost as rate*duration)
go
create view minratessec as select tpname,opname,minrate from(select *,row_number()over(partition by tp_id order by minrate)r from(select distinct tp_id,op_id,min(rate)over(partition by tp_id,op_id)minrate from calls)x)y left join calltypes on calltypes.tp_id=y.tp_id left join operators on operators.op_id=y.op_id where r=1
go
create view minratesmin as select tpname,opname,minrate*60 minratemin from minratessec
go
create procedure usp_minratetype @type varchar(64)='local network'as select*from minratesmin where tpname=@type
go
exec usp_minratetype
/*if object_id('calls') is not null begin drop table calls end
if object_id('calltypes') is not null begin drop table calltypes end
if object_id('customers') is not null begin drop table customers end
if object_id('operators') is not null begin drop table operators end
if object_id('minratessec') is not null begin drop view minratessec end
if object_id('minratesmin') is not null begin drop view minratesmin end
if object_id('usp_minratetype') is not null begin drop procedure usp_minratetype end*/
если там данных много будет то можно проиндексировать например так:
create index calls_types on calls(tp_id)
create index calls_operators on calls(cust_id)
create index calls_rates on calls(rate)
create index calls_dates on calls(date)
Но подзреваю что кроме дохода есть ещё и цена на основании клиента и/или префикса (или типа звонка).. тогда структура немного побольше будет (тарифные планы и пр).
18 май 14, 19:11    [16033349]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить