2016-11-18 71 views
1

我有下表中的MySQL:Mysql的选择,如果MAX VAL和其他条件

id|time|depth 

ID和时间是主键。当最大时间深度不为0时,我需要一个查询来选择一行。 理想情况下,我甚至需要最大之前的行。

让我来举个例子。该表可以是这样的:

id  time  depth  
---------------------------- 
1  0   0 
1  10   1 
1  20   2  
2  0   0  
2  10   1 

在这种情况下,它应该返回:

id  time  depth  
---------------------------- 
1  20   2  
2  10   1 

谢谢你这么多

回答

1

联接使用子查询是这样做的一种方式。

SELECT a.id, a.time, a.depth FROM Table1 a 
INNER JOIN 
    (SELECT id, max(`time`) as mt FROM Table1 WHERE `depth` != 0 GROUP by id) as b 
ON a.id = b.id and a.time = b.mt 
+0

他会在正确的轨道让你刚刚提出的想法,但我想这个答案只能用'最大返回记录(时间)'这在他示例数据将是time = 20的1条记录,但我不知道它背后的逻辑是什么,以及它的逻辑是什么,但正如您所看到的,他需要一个查询,它也返回time = 10的记录以及 – EhsanT

+1

@EhsanT if你在这个查询的sqlfiddle中运行这个查询,你会看到那两行被返回 – e4c5

+0

我的不好,我完全忽略了'GROUP by' – EhsanT

0

试试这个:

select id,max(time) from test1 where depth<>0 group by id