2015-07-10 23 views
0

我有一个表USER与每个用户的条目:只选择最低的时间

USER_ID BIGINT NOT NULL PRIMARY KEY, 
USER_NAME VARCHAR(255) NOT NULL, 
USER_EMAIL VARCHAR(255) NOT NULL, 
USER_TIME BIGINT NOT NULL 

而且我选择数据:

SELECT USER_NAME, USER_TIME FROM USER ORDER BY USER_TIME 

现在我得到的是例如

Peter, 18 
Hans, 22 
Peter, 33 
Peter, 44 
Hans, 45 

我只想每个用户都有一次,我只想每个用户的最低时间。这只有一个选择语句可能吗?

所以结果应该是:

Peter, 18 
Hans, 22 

下面的SELECT语句是不是我的问题正确:

SELECT USER_ID,USER_NAME,MIN(USER_TIME) 
FROM USER 
GROUP BY USER_ID 
ORDER BY USER_TIME 

因为它没有正确排序。如果我有这样的名单:

Peter, 18 
Hans, 22 
Peter, 33 
queen, 15 
Peter, 44 
queen, 14 
Hans, 45 

有了上面的语句,我得到这样的结果:

Peter, 18 
queen, 14 
Hans, 22 

,但你可以看到这是不正确的。它应该是

queen, 14 
Peter, 18 
Hans, 22 

我希望它对所有结果排序。

+0

为什么你有一个名为'user'的表在表中有重复用户?你应该修复你的数据库。 –

+0

不,我不应该。没有用户注册或登录什么的。所以每个用户可以有多个条目。 – Mulgard

+0

。 。然后你有一个用户历史记录表或一个用户登录表,而不是一个用户表。 –

回答

1

你必须使用GROUP BYMIN函数来实现你的目标。

SELECT USER_ID,USER_NAME,MIN(USER_TIME) 
FROM USER 
GROUP BY USER_ID 
ORDER BY MAX(USER_TIME) DESC ; 
+0

我猜它接近解决方案,但还没有工作。我得到一个结果,但它不是由user_time排序的。不知道为什么 – Mulgard

+0

按条款添加'desc'按照条款 – Sadikhasan

+0

不,这不是我的意思。我想排序所有结果。 – Mulgard

1

您将需要使用类似:

SELECT USER_ID, USER_NAME, MIN(USER_TIME) 
FROM USER 
GROUP BY USER_ID 
ORDER BY USER_TIME DESC 

您使用agregate功能MINGROUP BY条款。

+0

我猜它接近解决方案,但还没有工作。我得到一个结果,但它不是由user_time排序的。不知道为什么。 – Mulgard

+0

它适用于我的自定义查询[此处](http://sqlfiddle.com/#!2/5fa9f/11)您是否需要按降序排列或以后排序? – SMA

+0

我在查询后添加了DESC,以降序对结果进行排序。 – SMA