Используйте row_number()
оконную функцию, ниже должно работать.
select *
from
(select cust_no,year_month,cc_limit,cc_tot_risk,cc_period_risk,cc_ins_risk,
row_number() over(partition by cust_no order by cc_limit desc) rownum
from tablename order by cust_no,year_month desc) tab
where rownum = 1
РЕДАКТИРОВАТЬ: Чтобы выяснить, почему order by
должно быть в строке зрения.
Сценарий: при наличии дублирующих записей для одних и тех же cc_limit и cust_no необходимо получить запись с наибольшим годовым месяцем.
Порядок извлечения данных для любой таблицы по умолчанию - это порядок, в который они вставляются, если только фильтр вызвал использование индекса для фильтрации данных.
Предположим, сначала вставляется запись 201912, а затем 201911 (хотя практически невозможно, хотя во время реорганизации базы данных порядок вставки может быть изменен), а затем без * Предложение 1016 * будет возвращать запись 201911 вместо 201912.
create table test (cust_no INT,yearmonth varchar(10),cc_limit INT,
cc_tot_risk INT,cc_period_risk INT,cc_ins_risk INT)
# cust_no 1 сначала вставляется запись 201912, а затем 201912 и имеет такой же cc_limit.
insert into test values(1,201911,16000,16,16,0);
insert into test values(2,201912,15000,16,16,0);
insert into test values(1,201912,16000,16,16,0);
insert into test values(3,201912,17000,16,16,0);
insert into test values(4,201911,10000,16,16,0);
при выполнении запроса без order by
во встроенном представлении
select *
from
(select cust_no,yearmonth,cc_limit,cc_tot_risk,cc_period_risk,cc_ins_risk,
row_number() over(partition by cust_no order by cc_limit desc) rownum
from test) tab
where rownum = 1
Годовой месяц, возвращенный для cust_no 1, равен 201911 вместо 201912
* 1 031 *
Но запрос с предложением order by
обеспечит возвращение последней годовой записи,
select *
from
(select cust_no,year_month,cc_limit,cc_tot_risk,cc_period_risk,cc_ins_risk,
row_number() over(partition by cust_no order by cc_limit desc) rownum
from tablename order by cust_no,year_month desc) tab
where rownum = 1
I продемонстрировали все поведение в ссылке DBFIDDLE для MySQL8.0 - https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=03b06094d10a0daf7732f0cb19798262