Войти

Показать полную графическую версию : хранимые процедуры на sql server management


s.kseniy@vk
18-12-2013, 20:04
Просьба подсказать, как выполнить процедуру. Т.е какие действия проделать.
Задание: есть журнал посещения (клиент, дата посещения, обслуживающий мастер), нужно у каждого клиента взять три последние посещения и если мастер один и тот же(3 раза), то вывести этого клиента и "Любимого мастера".

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

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

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

s.kseniy@vk
19-12-2013, 05:53
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
Если конечно ещё нужно то навскидку:
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
нужно у каждого клиента взять три последние посещения »
select TOP 3 id_usl_mast from Posechenie order by id desc...

а все остальное можно через select .. case... when (запрос выше = 3) Then чего то end




© OSzone.net 2001-2012