我有两张桌子,我想加入查询。
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函数样本记录,在此查询中,跟踪时间将发生变化,其余的将保持不变。
答案 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