mysql - 从两个表中选择时如何按日期获取最新结果?

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

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

enter image description here

最佳答案

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

关于mysql - 从两个表中选择时如何按日期获取最新结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836972/

相关文章:

php - 将用户添加到数据库时使用 PHP 类

php - 更新一对多关系条目而不触及未受影响的行

php - 如何根据名称/类别显示结果?

mysql - 尝试加载 jar 和外部类

php - 俄语西里尔文文本存入数据库

mysql - 并行查询 - SELECT 和 UPDATE - 选择太快或更新太慢问题

mysql - 当控制台从计数 (*) 中给我正确的数字时,为什么 C# 一直从查询中给我 -1?

mysql - 需要微调我在 varchar 列上有索引的 mysql 查询

mysql - 通过加入多个表来计算

sql - 用数组“插入”