2016-11-28 67 views
3

我有两个表,我想加入一个查询。如何从两张表格中选择最新的结果?

result保存结果的实际进入

user_tracking跟踪工作的验收和竣工,用户可以取消,并接受在稍后的时间重新工作。

SELECT * 
from 
svr1.result r, 
svr1.user_tracking u 
where 
r.uid = u.user_id and r.tid = u.post1 
and u.function_name = '7' #7 == accept work 
and r.insert_time > '2015-09-23 00:00:00' and r.insert_time < '2015-10-03 00:00:00' 
and u.track_time > '2015-09-23 00:00:00' and u.track_time < '2015-10-03 00:00:00' 

result表有期限内1785条记录,我想跟踪 但上面的查询将返回1990年的记录。我想知道如何过滤以获取用户唯一接受的最新日期。在

result表:UID,INT,TID,INT,结果,VARCHAR和insert_time,TIMESTAMP

user_tracking

表:USER_ID,INT,POST1,VARCHAR函数名,VARCHAR,结果,VARCHAR和track_time,TIMESTAMP

user_tracking函数示例记录,在此查询中,轨道时间将会改变,其余的将保持不变。

enter image description here

+0

可以添加样本数据和预期的结果 –

+0

什么时,你说用户所接受的最晚日期是否意味着每隔一列是的'track_time'除外? – AER

+0

@AER yea。我认为你的答案是正确的解决方案。我需要首先验证我的记录 – Desmond

回答

2

使用GROUP BY命令所要求的日期MAX(),这将选择的所有选项(假设所有其他列相等)的最新日期。代码如下(需要声明,因为MAX不幸中的所有列):

SELECT r.uid, 
    r.tid, 
    r.result, 
    r.insert_time, 
    u.user_id, 
    u.post1, 
    u.function_name, 
    u.result, 
    MAX(track_time)   
FROM 
svr1.result r, 
svr1.user_tracking u 
WHERE 
r.uid = u.user_id AND r.tid = u.post1 
AND u.function_name = '7' #7 == accept work 
AND r.insert_time > '2015-09-23 00:00:00' AND r.insert_time < '2015-10-03 00:00:00' 
AND u.track_time > '2015-09-23 00:00:00' AND u.track_time < '2015-10-03 00:00:00' 
GROUP BY 
    r.uid, 
    r.tid  
+0

谢谢@AER,看起来像这就是我要找的! – Desmond

+0

@Desmond请让我知道是否需要改变它的任何细微差别,为你工作,我会更新答案 – AER

+0

@Desmond And .... – AER

相关问题