2016-08-11 63 views
0

的每個不同值在MySQL表與5個字段:id, user_id, date, type, uid其中type可以12,我想找單個查詢哪裏可以取2分的結果,一個用於type = 1,另一個用於type = 2,基於日期字段。取只2的結果,一個用於混凝土字段

現在我有下面的查詢,它只給了我最後一個使用者不需要照顧type字段。

 
    SELECT t.uid 
    FROM table AS t 
    WHERE t.user_id = 666 
    ORDER BY t.date 
    DESC LIMIT 1 

有誰知道應該怎麼修改這個查詢,所以我可以得到用於type = 1,並根據日期字段的最後一個類型= 2的最後一個UID?我想保持AA單查詢

+0

你可以使用'用戶定義的變量'來創建一個每行'type'的行號,或者最簡單的解決方案可能是使用'union' ... – sgeddes

+0

試試這個https://stackoverflow.com/問題/ 32056885/select-the-last-two-records-in-sql-server-when-there-no-identity-column –

回答

1

Union all可能是最簡單的方法:

(select t.* 
from t 
where t.user_id = 666 and t.type = 1 
order by date desc 
limit 1 
) union all 
(select t.* 
from t 
where t.user_id = 666 and t.type = 2 
order by date desc 
limit 1 
) 
+0

感謝您的回答:)我更新了帖子,我需要獲取2個結果一個對於每個類型值,一個用於type = 1,另一個用於type = 2。工會都是我已經嘗試過的東西,但它對我來說並不太乾淨。我想知道更清潔和更好的表現。 – user846226

+0

爲了您的目的,'union all'可能是最好的。 'user_id,type,date'的索引將有助於性能。 –

+0

我剛剛發佈了一個更清潔的解決方案,以防萬一您的利益或其他人感興趣。我一直覺得大多數人使用聯盟來取得成果,他們不知道如何去做,所以我不是聯盟的愛好者。無論如何,非常感謝你的時間:) – user846226