Cześć, temat nie oddaje tego, co chcę osiągnąć, nie wiedziałem, jak go sformułować. Generalnie chodzi o coś takiego, mam tabelę:
ID | fiID | date | od |
-------------------------------------------
1 | NULL | NULL | NULL |
2 | 1 | 2009-01-01 16:15:00 | 0 |
3 | 2 | 2009-01-02 17:03:00 | 0 |
4 | 3 | 2009-01-03 16:59:00 | 1 |
5 | 4 | 2009-01-04 16:55:00 | 0 |
6 | 4 | 2009-01-04 15:20:00 | 1 |
7 | 5 | 2009-01-05 16:54:00 | 0 |
8 | 5 | 2009-01-05 16:30:00 | 1 |
I teraz muszę pobrać ID wcześniejszych dat dla rekordów, które mają takie samo pole fiID.
Czyli w tym wypadku ID = 6 i ID = 8
Ruszyłem, ale nie mam pojęcia co dalej.
Wiem, jak pobrać fiID, które się powtarzają:
select fiID
from tabela
group by fiID
having count(fiID)>1
To zapytanie zwróci mi dwie wartości: 4 i 5.
Ale co dalej?
Próbowałem różnych grupowań, ale dostawałem wszystkie IDki, czyli 5, 6, 7, 8, a tu potrzebuję tylko 6 i 8.
PS. Użycie max(ID) odpada, bo nie zawsze wczesniejsza data będzie miała większe ID
[dopisane]
OK, wymyśliłem coś takiego:
select ID
from tabela
where date in
(
select min(date)
from
(
select ID, fiID, date
from tabela
where fiID in
(
select fiID
from tabela
group by fiID
having count(fiID)>1
)
) as a
group by fiID
) and fiID in
(
select fiID
from tabela
group by fiID
having count(fiID)>1
)
Ale jestem ciekawy też innych rozwiązań, pewnie lepszych ;)