konto usunięte
Temat: Baza danych problem z jednym zapytaniem
Witam mam problem z jednym zapytaniem:/*
Lista 10 uslug przynoszacych najwieksze wplywy
operatorom w ciagu ostatnich 5 lat kalendarzowych
id uslugi nazwauslugi kwota wplywow
lista obejmuje tylko te uslugi ktore sa dostepne
u min 5 operatorow i skorzystalo z nich min 1000 klientow(roznych)
*/
Schemat bazy danych :
https://www.dropbox.com/s/c90fdixgbxwn423/Physical.jpg
[obrazek]
Koceptual:
https://www.dropbox.com/s/v8etnf9a57bpao5/Billing.jpg
Poprzednie zapytania poszły mam problem z tym ostatnim nie wiem jak podejść
Wczesniejsze rozwiazywalem w ten sposob moze nieoptymalnie ale nie jestem ekspertem dopiero sie ucze
/*
ZAPYTANIE 3
Najbardziej popularne modele telefonu (Idmodelu, NazwaModelu, NazwaMarki,
Liczba wystąpień) w poprzednim roku kalendarzowym(Umowa.Data_start)
*/
Select TEL_MODEL.IDMODELU,TEL_MODEL.NAZWAMODELU,TEL_MODEL.NAZWAMARKI, COUNT(U.IDMODELU) AS LW
FROM UMOWA AS U
INNER JOIN (SELECT T.IDMARKI, T.IDMODELU,T.IDTELEFONU, M.NAZWAMODELU, MAR.NAZWAMARKI
FROM TELEFON AS T
INNER JOIN MODEL AS M
ON M.IDMODELU = T.IDMODELU AND M.IDMARKI = T. IDMARKI
INNER JOIN MARKA AS MAR
ON MAR.IDMARKI = T.IDMARKI
) as TEL_MODEL ON U.IDTELEFONU = TEL_MODEL.IDTELEFONU
WHERE DATEDIFF(year,U.DATA_START,now()) >= 1
GROUP BY TEL_MODEL.IDMODELU,TEL_MODEL.NAZWAMODELU,TEL_MODEL.NAZWAMARKI
ORDER BY LW DESC
/*
Zapytanie 2
Lista klientow (idklienta, nazwisko,imie,) oraz laczna kwota wystawionych rachunkow
za ostatni rok kalendarzowy - tylko tych klientow ktorych kwota uslug przekracza
1000 PZL - liste posortowac wg kwoty rachunu malejaca
Dane z encji Uslugi wykonane kazdegi 1 miesiaca sa przenoszone do encji historiauslug
*/
SELECT K_U_T.ID_KLIENTA, K_U_T.Nazwisko, SUM(US_K.CENA) AS S
FROM( SELECT K.ID_KLIENTA,K.NAZWISKO,T.IDTELEFONU
FROM KLIENT AS K
INNER JOIN UMOWA AS U ON U.ID_KLIENTA = K.ID_KLIENTA
INNER JOIN TELEFON AS T ON T.IDTELEFONU = U.IDTELEFONU
) AS K_U_T
INNER JOIN ( SELECT U.CENA, HU_UW.IDTELEFONU
FROM( SELECT HU.IDUSLUGI, HU.IDRACHUNKU, HU.IDTELEFONU
FROM HISTORIAUSLUG AS HU
UNION ALL
SELECT UW.IDUSLUGI, UW.IDRACHUNKU, UW.IDTELEFONU
FROM USLUGIWYKONANE AS UW
)AS HU_UW
INNER JOIN USLUGA AS U ON HU_UW.IDUSLUGI = U.IDUSLUGI
INNER JOIN RACHUNEK AS R ON HU_UW.IDRACHUNKU = R.IDRACHUNKU
INNER JOIN JEDNOSTKAMIARY AS JM ON JM.IDJM = U.IDJM
WHERE JM.NAZWAJM = 'PLZ' AND Year(R.datawystawienia) = Year(NOW()) -1
) AS US_K ON K_U_T.IDTELEFONU = US_K.IDTELEFONU
GROUP BY K_U_T.ID_KLIENTA, K_U_T.NAZWISKO
HAVING S > 1000
ORDER BY S DESC
Czy moje sposoby podejcie jest wlasciwe ??
Uzywac moge tylko SQL-92Ten post został edytowany przez Autora dnia 03.01.14 o godzinie 22:31