MySQL选择不同的问题

时间:2011-06-08 13:55:11

标签: mysql sql select distinct greatest-n-per-group

我想从表中返回所有列,但仅针对“唯一”或“不同”用户。

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

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

任何想法?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

select * from table group by userid order by time;

不要忘记重命名用户ID和时间以匹配您的列名

答案 2 :(得分:0)

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

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

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

答案 3 :(得分: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列上添加索引

答案 4 :(得分: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