如何使用varchar类型的列在mysql中获取唯一的行

如何使用varchar类型的列在mysql中获取唯一的行,mysql,sql,Mysql,Sql,我有一个名为“person\u data”的表:- id req_type reqp_id reqt_id dev_id 1 track 11 12 33 2 stop_track 11 12 33 3 track 12 13 44 4 stop_track 12 13 44 5 track 12

我有一个名为“person\u data”的表:-

    id   req_type    reqp_id reqt_id  dev_id
    1    track       11     12      33
    2    stop_track  11     12      33
    3    track       12     13      44
    4    stop_track  12     13      44
    5    track       12     13      45
    6    track       13     14      55
现在的条件是我想要:-

id  req_type    reqp_id reqt_id dev_id
2   stop_track  11      12      33
4   stop_track  12      13      44
5   track       12      13      45
6   track       13      14      55
只有具有reqp_id、reqt_id、dev_id列重复的行的最后一行。 所有行,如果它们没有这三列作为副本。 这种情况是我们不能用的。 我尝试的是:-

select max(id),min(req_type),reqp_id, reqt_id, dev_id 
from person_data group by reqp_id, reqt_id, dev_id;
输出与我想要的完全相同:-

id  req_type    reqp_id reqt_id dev_id
2   stop_track  11      12      33
4   stop_track  12      13      44
5   track       12      13      45
6   track       13      14      55
如果我使用:-

select max(id),max(req_type),reqp_id, reqt_id, dev_id 
from person_data group by reqp_id, reqt_id, dev_id;
然后,输出仅在req_type列中更改为:-

req_type 
track
track 
track
track
但输出清楚地描述了max或min函数使用字母顺序对值进行排序,我不希望这样,否则如果有人更改req_type列的值,则输出将被更改。 提前感谢,

试试这个

SELECT T.* FROM person_data T JOIN
(
  SELECT Max(id) as maxid,reqp_id, reqt_id, dev_id 
  FROM person_data 
  GROUP BY reqp_id, reqt_id, dev_id
) S
ON T.id = S.maxid
产出将是:


可能是Hi Vignesh的重复,谢谢,实际上您的查询基本上是正确的,但是我不想再获得一列maxid,因此我们必须使用SELECT t.*FROM person_data t Inner JOIN SELECT maxid as maxid,reqp_id,reqt_id,dev_id FROM person_data GROUP BY reqp_id,reqt_id,dev_id S ON T.id=S.maxid以获得正确的输出