mysql查询根据最新时间戳获取最小值

时间:2014-12-05 18:35:35

标签: php mysql sql

您好我已经尝试为查询找到解决方案以获取最小值以及最新时间戳。

我有以下表格

表1

sno user_id   name subject  rank         Timestamp
 1    10      SS   maths1  1     2014-12-05 17:24:33 
 2    10      SS   maths2  2     2014-12-05 17:24:33
 3    10      PH   phy1    3     2014-12-05 17:24:33
 4    10      PH   phy2    4     2014-12-05 17:24:33
 5    10      SS   maths1  2     2014-12-04 17:24:33 
 6    10      SS   maths2  1     2014-12-04 17:24:33
 7    10      PH   phy1    3     2014-12-04 17:24:33
 8    10      PH   phy2    4     2014-12-04 17:24:33

Tabe12

sno  name  Status
1     SS    Active
2     PH    ACtive
3     So    Inactive

所以我想获得以下结果

 sno userid   name   subject  rank         timpestamp
     1    10      SS   maths1  1     2014-12-05 17:24:33 
     2    10      PH   phy1    3     2014-12-05 17:24:33

到目前为止,我尝试了这个查询,我能够获得具有不同名称的主题的最新时间和最低排名值。 但它们没有相互连接意味着我获得了最新时间戳,而其他行中的值最少。请帮帮我如何解决。

SELECT DISTINCT(T1.`name`), 
       T1.`user_id`,
       T1.`subject`, 
       MAX(T1.`Timestamp`) as latest_Timestamp, 
       MIN(T1.`rank `) as rank   
FROM Table1  T1,Table2 T2  
where T1.`user_id`='10' 
AND  T2.`status` = 'Active' 
AND T1.`name` = T2.`name`  
GROUP BY T1.`exercise_id`
ORDER BY T1.`quality_id`, T1.`Timestamp` ASC

1 个答案:

答案 0 :(得分:0)

关系数据库在集合上运行良好。所以想想不同集合中的数据

  • 您需要一个结合了t1和t2
  • 的集合
  • 您需要t1的子集,该子集仅包含每个user_Id和名称的最小排名和最大时间戳。

因此T1和T2连接在一起,生成您需要的数据和列的范围。然后我们加入子查询,使子集过滤掉你想要的非最大时间戳和非最小等级。

SELECT T1values.name, 
       T1values.user_id,
       T1values.subject, 
       T1values.rank,
       T1values.timestamp
FROM Table2 T2
INNER JOIN table1 t1Values
  ON t1values.sno = t2.sno
 and t2.status='Active'
INNER JOIN (SELECT user_Id, name max(timestamp) maxTime, min(rank) Mrank 
            FROM Table1 
            GROUP BY user_Id, Name) T1
 ON t1.name = T1values.name
and t1.user_Id = t1values.user_ID
and t1.maxTime = T1Values.timestamp
and t1.rank = T1values.mrank
WHERE T1values.user_id='10' 
ORDER BY T1values.quality_id, T1values.Timestamp ASC
相关问题