通過

2017-01-30 49 views
0

我做的,我想要的工作ID來進行分組查詢獲取使用組字段的最新值,但我想在結果中的最新時間戳行未發生通過

這裏是SQL小提琴

http://sqlfiddle.com/#!9/de8769 

爲表中的普通視圖是

enter image description here

使用此查詢我提出

後的輸出
SELECT 
DISTINCT(user_id), 
job_id, 
message, 
receiver_id, 
parent, 
type, 
id as id FROM ai_ms_messages 
WHERE (receiver_id = '7' OR user_id = '7') AND type<>0 AND type<>2 group by job_id 
ORDER BY max(timestamp) DESC 

enter image description here

但你可以看到它採取的id的值3 JOB_ID 11,但它應該採取值5(因爲這是最新的JOB_ID 11),也順序是錯誤的。由於job_id 11最新不是job_id 12.有什麼辦法可以實現這一點?

回答

0

的查詢是:

select 
distinct(m1.user_id), 
m1.job_id, 
m1.message, 
m1.receiver_id, 
m1.parent, 
m1.type, 
m1.id as id from ai_ms_messages as m1 
where m1.type<>0 and m1.type<>2 
and m1.timestampt = (select max(m2.timestamp) from ai_ms_messages as m2 where m2.job_id = m1.job_id) 
+0

謝謝你的回覆。其實我需要這個接收器ID,所以我可以使條件就像用戶ID或接收器ID,以便我可以檢查一個人是否收到或發送有關該工作的消息。但即使刪除後,接收器ID我沒有得到最新的ID –

+0

我已經添加到查詢 –

+0

以上編輯。請看一看。除了我的SQL小提琴休息;) –

0

根據您的查詢,你正在尋找receiver_id = '7'id =5 , receiver_id = '6'數據,所以這是不是在你的查詢輸出。

只需刪除其中的條件,或檢查數據按條件而已。

GROUP BY在它擊中第一個匹配的結果組。

因此,它優選該方法爲子查詢。

SELECT * 
FROM (

SELECT DISTINCT (
user_id 
), job_id, message, receiver_id, parent, 
TYPE , id AS id 
FROM ai_ms_messages 
WHERE (
receiver_id = '7' 
OR user_id = '7' 
) 
AND TYPE <>0 
AND TYPE <>2 
ORDER BY TIMESTAMP DESC 
) AS sub 
GROUP BY job_id 
+0

你好,謝謝你的回答,但它仍然不會顯示最新的ID應該是5即使我刪除接收器ID –

+0

@ParamVeer:請檢查我的查詢。 –

+0

當我嘗試爲任何其他作業類型和類型添加新記錄時,會出現問題。 –