Nie bardzo mogę sobie poradzić z kilkoma zapytaniami SQL, m.in.:
1. Wypisz jakie usługi dla kontraktów 2,3 i 4 były aktywne w 2001-07-02.
2. Dla każdego kontraktu w bazie, wypisz aktualny status usługi nr 10 i nr
20.
Zalecana postać:
ID_KONTRAKTU USL_10 USL_20
1 "Aktywna" "Aktywna"
2 "Aktywna" "Deaktywna"
3 "Deaktywna" "Deaktywna"
3. Wypisz wszystkie usługi, dla kontraktu, mającego aktualnie najwięcej
włączonych usług.
Gdyby ktoś mial jakieś pomysły, to proszę o pomoc


Zapytania dotyczą tabeli Uslugi
Dodam że atrybut data_zm określa datę zmiany stanu usługi z aktywnej na
nieaktywna i odwrotnie.
Pozdrawiam, Bartek
A oto kod generujący tabele:
CREATE TABLE USLUGI ( KONTRAKT_ID NUMBER(10), USLUGA_ID NUMBER(4), SEQNO NUMBER(4), DATA_ZM DATE, STATUS VARCHAR(1) ); TRUNCATE TABLE uslugi; declare j number; k number; u number; sq number; d1 number; dt date; dt2 date; st number; us_n number; BEGIN dt := TO_DATE ('2000-01-01', 'YYYY-MM-DD'); FOR j IN 1 .. 10000 LOOP u:=1; d1 := TRUNC (DBMS_RANDOM.VALUE (1, 1300)); sq := TRUNC (DBMS_RANDOM.VALUE (1, 4)); dt2 := dt + d1; k :=0; us_n := TRUNC (DBMS_RANDOM.VALUE (1, 20)); FOR i IN 1 .. us_n LOOP k := TRUNC (DBMS_RANDOM.VALUE (1, 10)); --sys.dbms_output.put_line(to_char(dt2,'YYYY-MM-DD')); INSERT INTO uslugi VALUES (j, u , 0, dt2, 'a'); IF sq>1 then INSERT INTO uslugi VALUES (j, u , 1, dt2+k, 'd'); IF sq>2 then INSERT INTO uslugi VALUES (j, u , 2, dt2+2*k, 'a'); end IF; end IF; u:=u+k; END LOOP; END LOOP; COMMIT; END; /