Я пишу приложение для Android и имею довольно простую базу данных SQLite3 (см. Рис.), Но у меня много проблем с конкретным запросом.
Вот (часть) базы данных. Примечание: здесь есть отношение один ко многим. У игрока может быть много событий, но только 1 игрок на каждое событие.

Я хочу иметь список всех игроков, но мне нужно упорядочить этот список всех игроков по тому, есть ли у них событие с атрибутом Diagnosed
, установленным в false или нет (т.е. Все игроки с событием «Undiagnposed» идут вверху, все остальные игроки идут после). Если у них более одного события «Не диагностировано», используется самое новое.
Это самая сложная часть запроса. После этого игроки с событиями «Undiagnposed» должны быть упорядочены по их атрибуту «Magnitude» (int), а другие игроки (любой игрок, у которого нет никаких «неотмеченных» событий), должны быть упорядочены по их фамилии. ,
Вот пример списка, который мне нужен:
- Игрок <- 1 Не диагностированное событие (100 звездных величин) </li>
- Игрок <- 2 невыявленных события (новейшая величина 75) </li>
- Игрок <- 1 Не диагностированное событие (50 звездных величин) </li>
- Player <- Нет невыявленных событий (Имя: Johnny Appleseed) </li>
- Игрок <- Нет невыявленных событий (Имя: Джим Зебра) </li>
Единственный способ, которым я могу думать об этом, - это использовать 2 отдельных запроса (один для «невыявленных» игроков и другой для всех остальных), но я не думаю, что это лучший способ сделать это.
Заранее спасибо!
Редактировать
Хорошо, вот запрос, который в основном работает сейчас.
select player.PlayerID, player.fname, player.lname, stats.diagcount, topmag.magnitude
from player left outer join (
select playerid, MIN(diagnosed) as diagcount
from events group by playerid
)as stats on player.playerid = stats.playerid
left outer join (
select playerid,max(magnitude) as magnitude
from events group by playerid
)as topmag on player.playerid=topmag.playerid
order by CASE WHEN stats.diagcount Is NULL Then 1 Else 0 End,stats.diagcount,topmag.magnitude,lname;
Единственная проблема сейчас заключается в том, что игроки в нижней части списка (игроки без каких-либо диагностированных событий) сортируются по величине последних событий, а не по фамилии.