2011-08-19 90 views
0

2我有表选择最新的记录,如果列具有相同

**id name status date** 

1 john 2 01.01.2010 
2 mike 5 04.01.2010 
3 john 2 06.01.2010 
4 sam 1 08.01.2010 

约翰状态2两次,我需要从该表中选择约翰·麦克,其中状态= 2,但我需要显示的最新记录。 我不能使用order by我用它已经别的东西。

+0

你必须使用'为了by'你想要的东西。幸运的是,您可以使用'order by'来获取多于一列的数据。 – Mischa

回答

1

可以使用order by多个标准是这样的:

ORDER BY date desc, status desc 
1

您需要使用相关子查询像这样:

select * 
from table t1 
where t1.date = (select max(t2.date) 
        from table t2 
        where t1.name = t2.name 
        and t1.status = t2.status) 
0
SELECT * 
FROM table t 
WHERE status = 2 
AND date = (SELECT MAX(date) FROM table tmp WHERE tmp.name = t.name GROUP BY name) 
1

查询会去得更快,如果你并不需要ID字段:

SELECT t.name, t.status, max(t.date) date 
FROM table t 
GROUP BY t.name, t.status 
ORDER BY [whatever] 

如果您确实需要ID和ID被保证的广告,使其与较新的日期记录时,你可以只添加max(t.id) id到字段列表。

相关问题