2014-12-05 213 views
1

您好我已經嘗試找到一個查詢的解決方案,以獲取minvalues以及最新的時間戳。mysql查詢根據最新時間戳獲取最小值

我有如下表

表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 
+0

在我看來,你希望每個用戶的最高排名與最新的時間戳,否則排名2應顯示爲排名4.這是正確的嗎? – xQbert 2014-12-05 18:38:19

+0

?但他們都活躍,所以不要打擾t2 – Strawberry 2014-12-05 18:45:40

回答

0

關係數據庫可以很好地工作。因此,認爲該數據在不同的組

  • 你需要一套結合T1和T2
  • 你需要T1的一個子集,僅包含最小等級和最大時間戳每個USER_ID和名稱。

因此,T1和T2會生成您需要的數據和列的Universe。然後,我們加入到連接子集的子查詢中,以篩選出您想要的非最大時間戳和非最小等級。

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 
+0

您好xQbert我試過您的查詢,但它不是在所有方面工作。 – 2014-12-08 16:08:50