Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql-查找重复值,然后只返回最新的值,如果返回某个结果,则忽略该值_Php_Mysql - Fatal编程技术网

Php Mysql-查找重复值,然后只返回最新的值,如果返回某个结果,则忽略该值

Php Mysql-查找重复值,然后只返回最新的值,如果返回某个结果,则忽略该值,php,mysql,Php,Mysql,我有 它列出了谁做了什么测试,什么时候,以及他们是否通过了测试。 我需要能够返回那些没有通过mod1测试的人的结果 如果我使用 Tablename id coid name test passfail testdate VALUES 1 1 Chris mod1 fail 2015-05-20 2 1 Chris mod1 pass 2015-05-

我有

它列出了谁做了什么测试,什么时候,以及他们是否通过了测试。 我需要能够返回那些没有通过mod1测试的人的结果

如果我使用

Tablename
id     coid     name     test     passfail     testdate
VALUES
1       1       Chris    mod1     fail         2015-05-20
2       1       Chris    mod1     pass         2015-05-25
3       2       Patrick  mod1     fail         2015-06-10
4       3       James    mod1                  2015-12-21
5       4       Agnes    mod1     cancelled    2015-07-01
6       5       Freya    mod1     pass         2015-07-01
7       5       Freya    mod2     pass        2015-07-05
克里斯在结果中,因为他也没有通过mod1,但我需要能够忽略失败,因为他现在已经通过了

我追求的结果是

SELECT *
FROM `tablename` 
WHERE `test` = 'mod1' AND `passfail` != 'pass'
coid
是联系人ID,以防我遇到两个同名的人

如果我能找到重复的
coid
,并且已经完成了mod1,那么请选择最新的日期,然后检查它是否通过。我认为这应该给我我需要的结果,我不知道怎么做,虽然。。。请帮忙

我一直在尝试各种各样的东西

试试这个:

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

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

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

 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;
理论上,这应该抓住最新的
coid

试试这个

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

谢谢你的回答,我无法让这个工作,因为我不断得到一个错误的“分组”部分,不知道为什么。。。语法还不是我擅长的东西。@Leo我把它们倒过来了。组和顺序必须按一定的顺序。很抱歉,没问题,我还有一些类似的select查询需要执行,因此我可能也需要此查询。感谢您的帮助,我添加了条件,但似乎无法获得正确的结果。
SELECT *
FROM table_name
WHERE coid NOT IN (
    SELECT coid 
    FROM same_table_name 
    WHERE test = 'mod1' AND passfail = 'pass'
);