【问题标题】:How to get latest results by date when selecting from two table?从两个表中选择时如何按日期获取最新结果?
【发布时间】:2016-11-28 03:59:26
【问题描述】:

我有两个表,我想加入一个查询。

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 and track_time,TIMESTAMP

user_tracking 函数示例记录,在这个查询中跟踪时间会改变,其余保持不变。

【问题讨论】:

  • 能否添加示例数据和预期结果
  • 你说用户接受的最新日期是什么意思是否意味着除了track_time之外的所有其他列都是相同的?
  • @AER 是的。我认为您的答案是正确的解决方案。我需要先验证我的记录

标签: mysql sql


【解决方案1】:

在所需日期使用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      

【讨论】:

  • 感谢@AER,看来这就是我要找的东西!
  • @Desmond 只要让我知道是否需要更改任何细微差别以使其适合您,我会更新答案
  • 谢谢,这正是我所需要的!但是我认为 r.uid 和 r.tid 的组就足够了
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2017-06-21
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多