2011-06-08 77 views
0

我想返回表中的所有列,但只返回'唯一'或'不同'用户。MySQL选择不同的问题

我想从表中抓取所有不同的用户,但返回所有列。

我将按时间戳对表格进行排序,以抓取每个不同用户的“第一个”条目。

任何想法?

+0

据我所知DISTINCT不是为了列而是为了返回的记录。就像如果你选择像:SELECT A,B,C FROM ...那么A,B,C作为记录在结果集中将是唯一的。我想你必须使用GROUP BY或在原始查询的WHERE中将不同的用户选入IN(SELECT DISTINCT ...)。 – Damien 2011-06-08 14:00:20

回答

2

你应该发布表格定义,但或多或​​少应该可以使用GROUP BY

SELECT col1, col2, col3, MIN(timestamp) 
FROM users 
GROUP BY 
     col1, col2, col3 

如果您有任何其他列的还包括可变数据(因为他们实际上应该在规范化表),你必须让你希望对他们使用什么都汇集功能的选择。

SELECT col1, col2, col3, MAX(var1), AVG(var2), ..., MIN(timestamp) 
FROM users 
GROUP BY 
     col1, col2, col3 
+0

把我打倒吧,该死! – 2011-06-08 14:01:35

+0

@韦斯利 - 你不能让他们全部 2011-06-08 14:02:49

+0

好的,不知道这个......这是我现在拥有的。 'SELECT * FROM userinfoTable INNER JOIN users on userInfoTable.user_id = users.user_id ORDER BY userInfoTable.uptime ASC;' 我只是在'ORDER BY'之前抛出'GROUP BY userInfoTable.user_id'吗? – 2011-06-08 14:08:20

0

您是否尝试过使用GROUP BY,即

SELECT * FROM users GROUP BY id ORDER BY ... 

一般来说它应该工作,但是你有没有提到任何结构..

1
select * from table group by userid order by time; 

不要忘了重命名用户名和时间与您的列名匹配

+0

...... MySQL一直在给我这个小兵。那有什么意思?这是神奇的 – 2011-06-08 14:04:09

+0

你是什么意思? – Serg 2011-06-08 14:05:49

+0

没有其他我知道的数据库允许SELECT *和GROUP BY一起使用。这没有意义,但为每列选择一个任意值。 – 2011-06-08 14:07:39

0

您并不需要进行分组。你需要的是选择你的表中的每个记录不具有对同一用户的另一个纪录较小(或更高版本)日期和时间

select * from my_table t1 
where not exists (select 1 from my_table t2 
        where t1.user = t2.user 
        and t1.time < t2.time) 

一定要对usertime

0
select * 
from table a, 
(select min(timestampfield) as ts, userid as userid 
from table 
group by userid) b 
where a.userid = b.userid and a.ts = b.ts 
指标