Php Mysql-查找重复值,然后只返回最新的值,如果返回某个结果,则忽略该值
我有 它列出了谁做了什么测试,什么时候,以及他们是否通过了测试。 我需要能够返回那些没有通过mod1测试的人的结果 如果我使用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-
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'
);