Mysql - 找到重复的值然后只返回最新值然后如果它返回某个结果则忽略它

时间:2015-07-09 16:30:46

标签: php mysql

我有

SELECT *
FROM `tablename` 
WHERE `test` = 'mod1' AND `passfail` != 'pass'

它列出了谁做了什么测试以及何时,以及是否通过了测试。 我需要能够返回未通过mod1测试的人的结果。

如果我使用

3       2       Patrick  mod1     fail         2015-06-10
4       3       James    mod1                  2015-12-21
5       4       Agnes    mod1     cancelled    2015-07-01 

克里斯在结果中因为他也失败了mod1,但我需要能够忽略失败,因为他现在已经过去了。

我追求的结果是......

coid

coid是联系人ID,以防万一我得到两个同名的人。

如果我找到已经完成mod1的重复{{1}},那么请选择一个最新日期,然后检查它是否为通行证。我认为应该给我我需要的结果,我不知道如何做到这一点......请帮助

我一直在sqlfiddle

上尝试各种各样的事情

3 个答案:

答案 0 :(得分:1)

试试这个:

 select * from table_name t1 
 inner join (select max(id)as id from table_name group by coid) as t2
 on t1.id=t2.id;

您可以在子查询中放置任何where条件

答案 1 :(得分:1)

我认为GROUP BY会提供数据,但我不确定,因为我没有您的数据集

SELECT *
FROM `tablename` 
WHERE `test` = 'mod1' AND `passfail` != 'pass'
GROUP BY coid
ORDER BY testdate DESC

理论上,这应该抓住最新的coid

答案 2 :(得分:1)

试试这个......

SELECT *
FROM table_name
WHERE coid NOT IN (
    SELECT coid 
    FROM same_table_name 
    WHERE test = 'mod1' AND passfail = 'pass'
);