MySQL查询帮助(半独特结果)
user_id | user_destination | user_date_out | user_date_in | user_purpose | uid
0095 | NYC | 2010-11-25 | 2010-11-26 | Work | 1
0105 | Seattle | 2010-11-15 | 2010-11-20 | Work | 2
0095 | Home | 2010-11-10 | 2010-11-11 | Personal | 3
| Nashville | 2010-11-10 | 2010-11-12 | Doctober | 4
我在MySQL表中有上述数据。如果它是该user_id的最新user_date_out,我需要一个将输出该行的查询。很难解释,但应通过查询显示的行是uid 2,3和4(UID 1会因为user_date_out比同一用户的UID 3“旧”而下降)。谁能帮我这个?提前致谢!MySQL查询帮助(半独特结果)
编辑:我解决它通过使用以下查询:
SELECT *
FROM `table`
WHERE `uid` = (
SELECT `uid`
FROM `table` as `alt`
WHERE `alt`.`user_id` = `table`.`user_id`
ORDER BY `user_date_out`
LIMIT 1
)
ORDER BY `user_date_out`
每请求
SELECT *
FROM `table`
WHERE `uid` = (
SELECT `uid`
FROM `table` as `alt`
WHERE `alt`.`user_id` = `table`.`user_id`
ORDER BY `user_date_out`
LIMIT 1
)
ORDER BY `user_date_out`
这将只会返回uid 3.我需要返回2,3和4.这显然只是示例数据,所以我不能只是“选择wehre user_id ='0105'和' 0123' ”。希望这有点道理。我试图解释是令人困惑的。感谢您的答复。 – Trevor 2010-11-10 22:44:32
没有你应该好的地方。我想你在编辑之前就已经对它进行了审查。这将收集每个user_id最近的日期 – krx 2010-11-10 22:48:45
我记得在编辑之前你的答案。 ;-)不幸的是,这仍然行不通。我认为这是因为MySQL在订购它们之前将user_id字段分组,所以它仍然抓取UID 1而不是UID 3 for user_id 0095 – Trevor 2010-11-10 22:51:33
SELECT t.*, a_subquery.min_user_date_out
FROM your_table t
JOIN (SELECT user_id, MIN(user_date_out) AS min_user_date_out
FROM your_table
GROUP BY user_id) a_subquery
ON a_subquery.min_user_date_out = t.user_date_out
AND a_subquery.user_id = t.user_id
从MySQL有时有问题瓦特/子查询,这里是用相同的等效查询自我排斥加入:
SELECT t.*
FROM your_table t
LEFT JOIN your_table t2
ON t.user_id = t2.user_id
AND t.user_date_out > t2.user_date_out
WHERE t2.user_id IS NULL
请注意,如果给定的user_id
有多个user_date_out
,则这两个查询都不起作用。
由于某种原因,这只返回1个结果。不过我想我已经解决了! – Trevor 2010-11-10 23:13:36
发现这:http://stackoverflow.com/questions/924494/mysql-group-by-ordering – krx 2010-11-10 23:06:28
@ krio,这有帮助!我删除了最后的“限制3”,并从命令中删除了DESC,并且我得到了我需要的结果!感谢你的帮助! – Trevor 2010-11-10 23:14:29
@krio - 你可以在这里将答案粘贴到答案中吗? – warren 2010-11-10 23:23:40