Select 来自相似行的一行 MYSQL

Select a row from similar rows MYSQL

我有一个Table这样的

CREATE TABLE prova
    (`ID` int, `CODCLI` longtext, `RIFYEAR` int, `VAL` int)
;
    
INSERT INTO prova
    (`ID`, `CODCLI`, `RIFYEAR`, `VAL`)
VALUES
    (1, '1dad000', 2020, 150),
    (2, '500', 2020, 100),
    (3, '1dad000', 2021, 50),
    (4, '1dad000', 2022, 70),
    (5, '2000', 2023, 80)
;

http://www.sqlfiddle.com/#!9/7697a4/4 我想 select 这些行

2, '500', 2020, 100
3, '1dad000', 2021, 50
4, '1dad000', 2022, 70

我该怎么办?

我写了这样的东西

SELECT * 
  FROM prova 
 WHERE CODCLI IN ('500','1dad000')

但是当 'RIFYEAR' 相同时,我只想 select 具有 CODCLI = 500 的行。

感谢您的帮助 ;)

一种方法使用window函数:

SELECT p.*
FROM (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY year ORDER BY CODCLI DESC) as seqnum
      FROM prova p
      WHERE CODCLI IN ('500', '1dad000') 
     ) p
WHERE seqnum = 1;

保证每年 return 一行。

或使用NOT EXISTS:

select p.*
from prova p
where p.codcli = '500' or
      (p.codcli = '1dad000' and
       not exists (select 1
                   from prova p2
                   where p2.year = p.year and p2.codcli = '500'
                  )
      );

如果 prova 中有重复,则每年可以 return 重复。