删除mysql查询中的某些行

时间:2019-02-08 12:38:04

标签: mysql

在mysql请求下

 SELECT DISTINCT(codeAdherent), dateFin   
FROM hs  
WHERE
codeFamilleArticle IN ('ABO', 'ABOW')  
AND dateFin >= date('2018-01-01')  
ORDER BY codeAdherent ASC

codeAdherent    date  
1099        2018-12-31  
1099        2019-12-31  
1318        2018-12-31  
1392        2018-12-31  
1392        2019-12-31  
1415        2018-12-31  
1415        2019-12-31  
1600        2018-12-31  
1785        2018-12-31  
1785        2019-12-31  
1806        2018-12-31  
1806        2019-12-31  
1825        2018-12-31  
1983        2019-12-31  
2039        2018-12-31  
2039        2019-12-31  

有时codeAdherent出现两次,一次出现在2018-12-31,另一次出现在2019-12-31。
我想舍弃出现两次的行,而只保留那些到2018年出现一次的行。
可以使用PHP进行此操作,但是有一种方法只能使用查询吗?

2 个答案:

答案 0 :(得分:0)

SELECT codeAdherent, MIN(dateFin) as dateFin 
FROM hs WHERE codeFamilleArticle IN ('ABO', 'ABOW') 
GROUP BY codeAdherent 
ORDER BY codeAdherent ASC

答案 1 :(得分:0)

带有GROUP BY子句的HAVING只能返回唯一。

SELECT codeAdherent, MAX(dateFin) AS dateFin
FROM hs  
WHERE codeFamilleArticle IN ('ABO','ABOW')
  AND dateFin >= date('2018-01-01')
GROUP BY codeAdherent
HAVING COUNT(*) = 1
ORDER BY codeAdherent ASC