У меня есть 2 таблицы Person (ID, NAME, CLAN_ID) и DailyScore (PERSON_ID, CLAN_ID, DAY_NUMBER, SCORE).
SCORE может принимать значения "A", "B", "C "или" - "(" - "означает отсутствие).
Мне нужно сделать 2 отдельных запроса, чтобы получить для данного CLAN_ID:
- текущую серию данного счета (скажем, A, например) для каждого Лица и его имени, упорядоченные по длине полосы DES C
- самая длинная полоса данного результата (например, A, например) для каждого Лица и имя человека, упорядоченное по длине полосы DES C
Важным ограничением является то, что "-" СЧЕТЫ игнорируются, так как они представляют отсутствие, а не реальные Счета.
Пример данных:
Персона таблицы:
_ID NAME CLAN_ID
1 John 11
2 Alice 11
3 Bob 12
4 Sara 12
Таблица DailyScore:
PERSON_ID CLAN_ID DAY_NUMBER SCORE
1 11 1 A
1 11 2 A
1 11 3 A
1 11 4 C
1 11 5 A
2 11 1 B
2 11 2 C
2 11 3 B
2 11 4 A
2 11 5 A
3 12 1 A
3 12 2 A
3 12 3 A
3 12 4 A
3 12 5 B
4 12 1 C
4 12 2 B
4 12 3 C
4 12 4 A
4 12 5 -
Пример желаемого результата 1 (CLAN_ID = 11, SCORE = A):
Текущая полоса:
Alice 2
John 1
Самая длинная полоса:
John 3
Alice 2
Пример желаемого результата 2 (CLAN_ID = 12, SCORE = A):
Текущая строка eak:
Sara 1*
Bob 0
*, поскольку "-" игнорируются, у Сары текущая полоса 1 балл
Самая длинная полоса из всех:
Bob 4
Sara 1
Редактировать:
Если это поможет, вот этот пример в SQL Fiddle: http://sqlfiddle.com/#! 7 / 2ed69 / 2