2015-07-10 68 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