Нужна помощь в создании оператора SQL

0

Вот данные таблицы

Name       Stage ID       Event ID     Attempt No            Score
Ramesh        1             1             1                    10
Ramesh        1             1             2                    20
Ramesh        2             1             1                    30
Suresh        1             1             1                    05
Suresh        2             1             1                    15
Suresh        2             2             1                    25
Suresh        2             2             2                    35
Suresh        2             2             3                    30

У нас есть таблица с именем, идентификатором этапа, идентификатором события, попыткой №, счетом.

Мы хотим сгруппировать данные по имени, идентификатору этапа, идентификатору события, № попытки, макс. (Оценка)

Могут быть записи для каждой попытки под этапом и событием и именем, и нам нужно взять максимальный счет, и то же самое должно быть отображено.

Выход должен быть:

Name       Stage ID       Event ID     Attempt No            Score
Ramesh        1             1             2                    20
Ramesh        2             1             1                    30
Suresh        1             1             1                    05
Suresh        2             1             1                    15
Suresh        2             2             2                    35

Это будет иметь одну запись для комбинации имя + сцена + событие

  • 0
    Что если у вас есть две строки с одинаковым (максимальным) счетом? Какой из них вы хотите выбрать?
Теги:

2 ответа

0

Вы можете попробовать ниже, используя коррелированный подзапрос

select * from tablename t1
where score in 
    (select max(score) from tablename t2 where t1.name=t2.name and t1.stage=t2.stage 
      and t1.eventid=t2.eventid)
  • 0
    Почему in а не = ?
  • 0
    Большое спасибо. Это сработало. Ценю твою поддержку
Показать ещё 1 комментарий
0

Вы можете использовать внутреннее соединение в подзапросе для максимального значения, которое вам нужно

select yt.* 
from your_table yt
INNER JOIN ( 
    select Name, Stage_ID, Event_ID, Attempt_No, max(score) max_score 
    from your_table 
    group by  Name,  Stage_ID, Event_ID, Attempt_No
) t on yt.name  = t.name 
      and yt.Stage_ID = t.Stage_ID
          and yt.Event_ID = t.Event_ID 
            and yt.Attempt_No = t.Attempt_No 
              and yt.score  = t.max_score   join 
  • 0
    Большое спасибо, я использовал другой ответ, и это сработало. Ценю ваш быстрый ответ и помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню