[MSSQL] Wybranie tylko wcześniejszych dat z tabeli

0

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 ;)

0
select 
  a1.id 
from 
  test a1 
where 
  a1.fiid in (select fiid from test having count(fiid) > 1 group by fiid)
  and dat = (select min(dat) from test a2 where a2.fiid = a1.fiid);

pozmieniaj sobie nazwy tabelek i pól

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