从两个表中选择时,如何按日期获得最新结果?

时间:2016-11-28 03:59:26

标签: mysql sql

我有两张桌子,我想加入查询。

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,result,VARCHAR和insert_time,TIMESTAMP

user_tracking表中的

:user_id,INT,post1,VARCHAR function_name,VARCHAR,result,VARCHAR和track_time,TIMESTAMP

user_tracking函数样本记录,在此查询中,跟踪时间将发生变化,其余的将保持不变。

enter image description here

1 个答案:

答案 0 :(得分: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