skomplikowana kwerenda

0

Witam
Mam taki problem z którym się głowię już drugi dzień.

Mam tabelę zawierającą pola: ID, SYMBOL, DATA, NAZWA i potrzebuję z niej wyciągnąć te rekordy, w których DATA jest mniejsza od podanej, pod warunkiem, że nie ma w tabeli innych rekordów, w których DATA jest większa, bądź równa podanej, gdzie jest ta sama NAZWA i SYMBOL.

Pomożecie?

0

Możesz np. tak:
Wybierasz wszystkie z datą mniejszą grupujesz po symbol i nazwa. Łączysz (left'em) z wszystkimi z datą większą równą zgrupowanymi po symbol i nazwa. Jeśli jest dopasowanie to odrzucasz. Jeśli nie ma to jest to czego szukasz.

select T0.* from
(    
    select symbol, nazwa, count(*) as C from b1
    where data < '2011-07-05'
    group by symbol, nazwa
) as T0
left join (
    select symbol, nazwa, count(*) as C from b1
    where data >= '2011-07-05'
    group by symbol, nazwa
) as T1 on T0.symbol = T1.symbol and T0.nazwa = T1.nazwa
where T1.C is null

Jeśli potrzebujesz rekordy z id i datą, to są to wszystkie, które mają symbol i nazwę wybraną przez powyższą query.

0

A nie lepiej tak?

select T0.* from b1 as T0
where data < '2011-07-05'
and not exists (select 1 from b1 as T1 where T1.symbol = T0.symbol and T1.nazwa = T0.nazwa and T1.data >= '2011-07-05')

Edit: zmieniłem "T1.data >= T0.data" na "T1.data >= '2011-07-05'" w podzapytaniu.

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