замените повторяющееся значение на null SQL

#mysql #sql

Вопрос:

У меня есть таблица со следующими данными :

ордерид item_amount total_bill_amount
123 2 8
123 6 8
455 4 11
455 6 11
455 1 11

Я хочу заменить повторяющееся значение на total_bill_amount значение null, чтобы первая запись всегда содержала значение, а все, что будет после, — значение null. Пример того, как я хочу видеть данные :

ордерид item_amount total_bill_amount
123 2 8
123 6 нулевой
455 4 11
455 6 нулевой
455 1 нулевой

Обратите внимание, что моя версия MySQL 5.7, поэтому я не могу использовать какие-либо оконные функции в MySQL 8.

Комментарии:

1. Таблица представляет собой набор неупорядоченных строк, в ваших данных нет «первой» записи; Идентификатор заказа 455 вы хотите сохранить номер элемента 4, но не 6 или 1 — вам нужен какой-то способ упорядочения данных в соответствии с вашими критериями.

2. на самом деле заказ будет соответствовать идентификатору заказа, первая строка для идентификатора заказа должна показывать общую сумму счета, а остальные строки для идентификатора заказа должны быть пустыми

3. вы не поняли. Идентификатор заказа не уникален, в каждой группе нет порядка.

Ответ №1:

Вы можете использовать row_number() с подзапросом:

 with to_r(rnum, id, a, t) as (  select row_number() over (order by o.orderid), o.* from orders o  ) select r.id, r.a, case when   (select sum(r1.t = r.t and r1.id = r.id and r.rnum gt;= r1.rnum) from to_r r1) gt; 1   then null else r.t end from to_r r