2016-08-11 65 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