Zadanie w ms sql - jak zrobić?

0

Witam Was bardzo serdecznie.

Piszę bo mam problem z poniższą kwestią.

Mam następującą tabelę
screenshot-20171115180115.png

Muszę przygotować zestawienie pokazujące wizyty klientów:
Ilu klientów miało ile wizyt,z ich chronologicznym porządkiem (z uwzględnieniem dat).
Chodzi o wszelkie możliwe kombinacje wizyt i ilość pacjentów, którzy byli u lekarzy właśnie w takiej kolejności wizyt

np.
4 wizyty
w kombinacji
screenshot-20171115174944.png
(wynik 1 pacjent)

3 wizyty
dwie kombinacje
screenshot-20171115175254.png

2 wizyty
dwie kombinacje
screenshot-20171115175759.png

Jak to zrobić? Możecie pomóc?

0

Jest jeszcze jakąś kolumna? Jakieś ID czy coś...

0

Nie. Praktycznie tylko to. Mamy wziąć pod uwagę wizyty przypadające na każdą osobę, więc po peselach.

0

powiem szczerze, że nie łapie zależności czemu tak a nie inaczej prezentują się wyniki

0

Poszedłnym w coś w ten deseń:

with ctes as (
select 
    pesel
from (select 
          * 
          ,row_number() over (partition by pesel order by data_skier) r
      from 
          wizyty) w
      left join (values 
                     (1,'Pediatra')
                     ,(2,'Gastrolog')
                     ,(3,'Ginekolog')
                     ,(4,'Internista')
                ) as S(r,l) on s.r=w.r and s.l=w.lekarz
group by 
    pesel
having 
    count(s.r)=4
 )
 
 
 select 
  'Pediatra->Gastrolog->Ginekolog->Interista' as Sekwencja
  ,count(distinct pesel) IloscPacjentów
from ctes

Generalnie musisz jakoś zdefiniować sekwencje które szukasz, to przykłąd jak znaleźć pierwszą z podanych http://sqlfiddle.com/#!6/309fd/14

0

Jeżeli jednak potrzebujesz jednym zapytaniem to wyciągnąć, to trzeba stworzyć tabelę która opisze sekwencje występowania i podać wynik tak:

with ctes as (
select
    s.*
    ,w.pesel
    ,w.r wr
from 
    s 
    left join (select 
          * 
          ,row_number() over (partition by pesel order by data_skier) r
      from 
          wizyty) w
     on s.r=w.r and s.lekarz=w.lekarz )
 , cteAgg as ( 
select 
    id
    ,pesel 
from 
    ctes
group by 
    id
    ,pesel
 having 
    count(wr)=max(ilosc)
 )
 
 select id, count(distinct pesel) IlePacjentow from cteagg
 group by id

http://sqlfiddle.com/#!6/d928f/11

1 użytkowników online, w tym zalogowanych: 0, gości: 1