2013-02-14 20 views
1

我的表結構爲:形式的Mysql加入

SELECT * FROM `MYTABLE` WHERE `USERID` = 148 ORDER BY `TABLEDATE` DESC; 

ID USERID STATE_ID TABLEDATE    
96 148 13   2013-01-08 06:11:34 
554 148  3   2013-01-03 04:46:08 
25 148  2   2013-01-02 04:46:07 

我想秒錶用戶最高的入門「MYTABLE」(=>爲了通過STATE_ID DESC限制1,1),其日期最後一個條目是日期「2013年1月8日」。

我試圖組成查詢但失敗。請幫忙?

SELECT F1.USERID, 
    MAX(F2.TABLEDATE), 
    F2.STATE_ID 
FROM MYTABLE F1 
JOIN MYTABLE F2 ON F1.USERID = F2.USERID WHERE 
    F1.STATE_ID = 13 AND 
    F2.TABLEDATE < F1.TABLEDATE AND 
    F1.TABLEDATE <= '2013-01-08 23:59:59' AND 
    F1.TABLEDATE >= '2013-01-08 00:00:00' 
GROUP BY F1.USERID 

輸出

148 2013-01-03 04:46:08 2 

預計輸出

148 2013-01-03 04:46:08 3 

回答

0

如果希望過的State_ID第二高值的行,你可以簡單地這樣做:

SELECT * 
FROM 
(
    SELECT * 
    FROM yourTable 
    LIMIT 2 
) AS sub 
ORDER BY State_ID 
LIMIT 1; 
+0

子 - 查詢不好,請建議b你加入 – 2013-02-14 09:12:33

+0

@SheldonCooper - 我真的不知道如何使用連接來做到這一點。但是,爲什麼不子查詢?他們並不總是不好。另外,如果子查詢是做你想做什麼的唯一方法呢? – 2013-02-14 09:16:03

+0

Wherez日期條件? – 2013-02-14 09:38:01