Bu özyinelemeli SQL özelliğini kullanmaya çalışıyorum ama istediğimi yapmak için alamıyorum, hatta yakın değil. Ben mantıksız bir döngü içinde kodlanmış ettik, ben kullandım tablo güncelleştirme stili değil, tek bir özyinelemeli SQL sorgusuna dönüştürülebilir olup olmadığını soran. sırada yer almak altı oyuncusuOracle Recursive Subquery Factoring dönüştürmek
http://sqlfiddle.com/#!4/b7217/1
bulunmaktadır. Kimlik, grup kimliği, skor ve rütbeleri var.
İlk durum Ben en yüksek ilk skora sahip kişi alıp onlara rütbe 1. vermek istiyorum
+----+--------+-------+--------+
| id | grp_id | score | rank |
+----+--------+-------+--------+
| 1 | 1 | 100 | (null) |
| 2 | 1 | 90 | (null) |
| 3 | 1 | 70 | (null) |
| 4 | 2 | 95 | (null) |
| 5 | 2 | 70 | (null) |
| 6 | 2 | 60 | (null) |
+----+--------+-------+--------+
Sonra aynı grup kimliği var herkesin puanına 10 bonus puan geçerlidir. Bir sonraki en yüksek puanı alın, 2. sıra belirleyin, bonus puanları dağıtın ve oyuncu kalmayıncaya kadar devam edin.
Kullanıcı kimliği kopma bağları.
Bonus puanları sıralamayı değiştirir. id = 4 başlangıçta 95 ile ikinci sırada, 100'ün arkasında ise 10 puanlık bonusla beliriyor, id = 2 yukarı çıkıyor ve noktayı alıyor.
Final devlet
+-----+---------+--------+------+
| ID | GRP_ID | SCORE | RANK |
+-----+---------+--------+------+
| 1 | 1 | 100 | 1 |
| 2 | 1 | 100 | 2 |
| 4 | 2 | 95 | 3 |
| 3 | 1 | 90 | 4 |
| 5 | 2 | 80 | 5 |
| 6 | 2 | 80 | 6 |
+-----+---------+--------+------+