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 重复。
我有一个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 重复。