2012-07-19 36 views
1

我有2個問題。首先我有一個的MySQL數據庫與行:ID(AUTO_INCREMENT PRIMARY KEY)時間。這個數據庫代表了一場比賽的時間。我想選擇時間最短的名稱和時間。SQL MIN()選擇數據。 ORDER表正確

SELECT name, MIN(time) as time FROM race GROUP BY TIME; 

只要在名稱中沒有重複,此查詢會給我所有時間和名稱。然而,我只想要最快的時間和該行的名字。

然後,當我提交我的時間,我想知道我在什麼地方。將ORDER BY TIME保持每行的每個ID相同或我可以只是ORDER表BY時間,然後選擇行ID = 1?

+0

您的查詢不正確!你確定它運行? – Razvan 2012-07-19 16:11:49

回答

2

如果它可能具有相同的時間多個條目,我會用這樣的嵌套查詢,因爲限制了結果集1可能會排除名稱。

select name, time from race where time = (select min(time) from race) 

如果你想知道一個給定的時間是在什麼地方,算了算有時間小於它的條目數。

select count(*) + 1 as place from race where time < [your time] 
+0

工作完美!關於第二個問題的任何想法? – 2012-07-19 16:32:29

+0

請參閱我的第二個問題的編輯。計數查詢將做到這一點。 – wsanville 2012-07-19 16:41:04

1

對於你的第一個問題,你想要的是選擇'最少'的時間。

這是,我認爲,這是最明確的方式,它使用LIMIT函數只返回1行。

的MySQL:

SELECT name, time 
FROM race 
ORDER BY time asc 
LIMIT 1; 

MS SQL:

SELECT TOP 1 name, time 
FROM race 
ORDER BY time asc 
+0

爲什麼添加SQL-Server變體? – 2012-07-19 16:19:28

+0

由於我和他們一起工作,並且我在各處看到C#,Android和PHP使用SQL查詢的示例,所以我經常會對MySQL和MS SQL語法的差異感到困惑。我想知道他們什麼時候不同。如果您遇到使用SELECT TOP 1的查詢,並且您是MySQL開發人員,則至少您知道如何在MySQL中執行此操作。 – Scen 2012-07-19 16:32:47

+0

有效,但只有在重複次數的情況下才會返回一個名稱。非常感謝! – 2012-07-19 16:33:34