Ciekawe zapytanie do bazy

0

Witam serdecznie
Mam następująca tabelę w mysql

int id pk (primary key)
string region pk
int group fk (foreign key)

W bazie danych mam np:

 --------------------
|id  | region | group  
 --------------------
|1   | PL      | 1       
 -------------------
|1   | BE      | 1       
 -------------------
|1   | CY     | 1       
 -------------------
|2   |PL       | 1       
 -------------------
|2   |ES      | 1       
 ------------------  
|3   |ES      |1        
 -------------------
|8   |PL      | 1       
 -------------------
|1   |DE      | 2       
 -------------------
|5   |LT      | 2       
 ------------------
|5   |CY     | 2       
 ------------------

itp

potrzebuję ciekawego zapytania które zwróci mi pierwsze wolne id danej grupy czyli np dla grupy 1 przy takim zestawieniu pierwsze wolne id = 4
natomiast dla grupy 2 pierwsze wolne id = 2

ogólnie to potrzebuję zrobić takie Named Query ale w sql też będzie

PS.

Dziękuję za podpowiedzi

0

Nie działa nic :/

0
  1. Mieć dodatkową tabelę z 1,2,3,... do niej left join łączysz swoją przefiltrowaną wg grupy, zostawiasz te rekordy z dodatkowej, które nie łączą się z rekordami z twojej tabeli i bierzesz min
  2. możesz użyć CTE (Common Table Expressions) żeby ponumerować wiersze, bierzesz te, którym numeracja do id nie pasuje i bierzesz minimalne takie id + 1
  3. zasymulowanie funkcji rankingujących, w szczególności row_number, z propozycji jakie widziałem chyba ta http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/ wydaję się najsensowniejsza, dalej paktr pkt 2
0
select t.`group`, min(t.id+1) from t LEFT JOIN t t1 on t.`group` = t1.`group` and t.id+1=t1.id where t1.id is null
group by t.`group`

Tabelą nazwałem sobie t.
Poza tym unikałbym nazw pól typu 'group'

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