Запрос приоритета SQL

У меня есть таблица журналов, в которой есть три столбца. Один столбец является уникальным идентификатором, один столбец называется «Имя», а другой - «Статус» .
Значения в столбце «Имя» могут повторяться, поэтому вы можете видеть имя «Джо» в нескольких строках. Имя «Джо» может иметь строку со статусом «открыто», другую строку со статусом «закрыто», другую со статусом «ожидает» и, возможно, одну для «удержания». Я хотел бы, используя определенный приоритет в порядке от самого высокого до самого низкого: («Закрыто», «Удерживать», «Ожидание» и «Открыто») вытащить строку с наивысшим рейтингом для каждого Имени и игнорировать другие. Кто-нибудь знает простой способ сделать это?

Кстати, не каждое Имя будет иметь все представления статуса, поэтому «Джо» может иметь строку только для «ожидания» и «удержания», а может быть, просто «ожидания».

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
997
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я бы создал вторую таблицу с названием что-то вроде «Status_Precedence» со строками вроде:

Status  | Order
---------------
Closed  |  1
Hold    |  2
Waiting |  3
Open    |  4

В вашем запросе другой таблицы выполните соединение с этой таблицей (на Status_Precedence.Status), а затем вы можете ORDER BY Status_Precedence.Order.

Я согласен с тем, что это существенно упорядочит мои имена и статус, но как тогда мне сохранить только строку с наибольшим номером для каждого имени?

madcolor 08.12.2008 18:52

ВЫБЕРИТЕ статус из таблицы, порядок из Status_Precedence, где Table.Status = Status_Precedence.Status ORDER BY Status_Precedence ORDER DESC;

gnud 08.12.2008 18:56

"ВЫБРАТЬ Статус из таблицы, заказ из Status_Precedence, где"? Я что-то пропустил?

madcolor 08.12.2008 19:00

... ГДЕ Table.Status = Status_Precedence.Status ORDER BY Status_Precedence.Order DESC LIMIT 0,1; «Стол» - это ваш стол - нигде я не видел названия.

gnud 08.12.2008 19:11

Я просто не получаю "Выбрать статус из таблицы", за которым следует запятая?

madcolor 08.12.2008 19:36

Ой. Гул. Не знаю, зачем я это сделал. Поздно ночью. ВЫБЕРИТЕ Table.Status, Status_Precedence.Order FROM Table, Status_Precedence ....

gnud 09.12.2008 18:15

Если вы не хотите создавать другую таблицу, вы можете назначить числовой приоритет, используя SELECT CASE

Select Name, Status, Case Status 
        When 'Closed' then 1
        When 'Hold' then 2
        When 'Waiting' then 3
        When 'Open' Then 4
        END
         as StatusID

         From Logging
Order By StatusId -- Order based on Case

Тем не менее, справочная таблица также является хорошим решением.

Я закончил тем, что использовал решение matt b и этот последний запрос, чтобы отфильтровать более низкий рейтинг (более низкий bing с более высоким номером).

SELECT * from [TABLE] tb
LEFT JOIN Status_Precedence sp ON tb.Status = sp.Status
WHERE  sp.Rank = (SELECT MIN(sp2.rank)
                FROM[Table] tb2
           LEFT JOIN Status_Precedence sp2 ON tb2.Status = sp2.Status
                WHERE tb.Status = tb2.Status)
order by tb.[name]

Другие вопросы по теме