Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   хранимые процедуры на sql server management (http://forum.oszone.net/showthread.php?t=274250)

s.kseniy@vk 18-12-2013 20:04 2274557

хранимые процедуры на sql server management
 
Вложений: 1
Просьба подсказать, как выполнить процедуру. Т.е какие действия проделать.
Задание: есть журнал посещения (клиент, дата посещения, обслуживающий мастер), нужно у каждого клиента взять три последние посещения и если мастер один и тот же(3 раза), то вывести этого клиента и "Любимого мастера".

Предполагаю: сгруппировать по клиентам, по дате. Проверять по строке до следующего клиента, как другой клиент, брать 3 предыдущие записи - проверять у них Мастера. И если один - то выводить.

Вот такое дело) Возможно осуществить таким способом? Или подскажите альтернативу?

Прикладываю картинку, для зрительного восприятия задания.

s.kseniy@vk 19-12-2013 05:53 2274757

Код:

use salon_k;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--CREATE PROCEDURE zapr AS BEGIN
go
--        with tabl as
--(
 select
  KartaKlienta.FIO, Posechenie.DateZapisi, Mastera.Familya,
  row_number() over (partition by KartaKlienta.FIO order by Posechenie.DateZapisi desc) as rn
 from
  KartaKlienta INNER JOIN
                      Posechenie ON KartaKlienta.id_klienta = Posechenie.id_klienta INNER JOIN
                      UslMast ON Posechenie.id_usl_mast = UslMast.id_usl_mast INNER JOIN
                      Mastera ON UslMast.id_mast = Mastera.id_mastera
--)                     
--select KartaKlienta.FIO, min(Mastera.Familya) as [любимый мастер]
--from  tabl
--where rn <= 3
--group by  KartaKlienta.FIO
--having  count(*) = 3 and count(distinct Mastera.Familya) = 1;
--END
GO

Нашла функцию - ROW_NUMBER.
Попробовала так. Но работает только открытая часть, если убрать комментарии - "Не удалось привязать составной идентификатор" столбиков из 2 селекта.Может быть не правильно задала?

xctr 15-01-2014 15:35 2289678

Если конечно ещё нужно то навскидку:
Код:

row_number() over (partition by KartaKlienta.FIO order by Posechenie.DateZapisi desc)
вот это поменять на:
Код:

row_number() over (partition by KartaKlienta.FIO, Mastera.Familya order by Posechenie.DateZapisi desc)

Delirium 28-01-2014 07:44 2297661

Цитата:

Цитата s.kseniy@vk
нужно у каждого клиента взять три последние посещения »

Цитата:

select TOP 3 id_usl_mast from Posechenie order by id desc...
а все остальное можно через select .. case... when (запрос выше = 3) Then чего то end


Время: 20:25.

Время: 20:25.
© OSzone.net 2001-