2014-04-21 73 views
2

我有這樣MYSQL - 選擇所有的行,但使用distinct在一列

Column_a | Column_b 
    a  | 5 
    b  | 25 
    g  | 14 
    t  | 13 
    b  | 15 
    c  | 04 
    g  | 15 
    b  | 13 
在column_a我有很多重複值的

表中的數據,我希望能夠選擇所有的行從表中,但如果兩行具有相同的column_a價值,我只想說我找了從colum_b在結果結果 爲例最大的價值排:

Column_a | Column_b 
    a  | 5 
    b  | 25 
    t  | 13 
    c  | 04 
    g  | 15 

預先感謝您

**

  1. 更新的問題

**

這些都是我在我的表中的列: CRMID |用戶| ticket_id | |描述|日期|小時

我想要做的是從表中選擇所有的行,但是當兩行具有相同的ticket_id時,我只想要最新的一個出現在結果中,所以行與最新的日期和小時, 對不起,使這個如此複雜! 我不是一個母語爲英語的人,我覺得很難很好地解釋這個問題。

+3

你想使用'group by'。如果你打算使用它,你想研究一下SQL語言。 –

+0

謝謝gordon linoff – PaxBin

+0

我遇到了一個問題,它只選擇最高值的column_b,它不顯示所有的行。我有兩個以上的列在我的表 – PaxBin

回答

4

如果按column_a那麼你可以使用集合功能,如max()它來獲得各組的最大值

select column_a, 
     max(column_b) as column_b 
from your_table 
group by column_a 
+0

謝謝juergen,我完全忘記了max(),:3再次感謝你 – PaxBin

3
SELECT Column_A, MAX(Column_B) FROM table 
GROUP BY Column_A 
2

你正在尋找一個Group By條款。你的語法應類似於此:

SELECT Column_A, MAX(Column_B) 
FROM Table 
GROUP BY Column_A 
-1

SELECT * FROM(SELECT * FROM通過column_b遞減yourtable順序)T組由column_a

1

如果你想獲得表中的所有列,那麼你有一個不同的問題(和一個不在原始發佈)。您應該將代碼添加到這樣的問題中的一個原因是您可以獲得更廣泛的答案。舉個例子,我忽略了這個問題,認爲這只是一個新手詢問顯而易見的SQL功能。

在MySQL中,最好的方法是使用not exists

select t.* 
from table t 
where not exists (select 1 
        from table t2 
        where t2.column_a = t.column_a and 
         t2.column_b > t.column_b 
       ); 

爲了獲得最佳性能,你想在table(column_a, column_b)的索引。而且,如果有重複的最大值,這可以返回多行。

此查詢不直觀。它所做的是:「從表中找出所有行,其中沒有其他行具有相同的column_a值和更高的column_b值」。如果你仔細想想,這與獲得最大價值是一樣的。這比其他方法(特別是聚合和連接)具有更好的性能,因爲MySQL會爲表中的每一行進行簡單的索引查找。這比聚合和連接快。

+0

非常感謝你的回答,我嘗試着使用你提到的,但它沒有工作,我害怕我錯過了它,我添加了一個更新我的問題解釋我的情況:/ – PaxBin

+0

沒關係,我添加了一個時間戳字段,使它easyer,這是我的查詢(根據你的教導我^^) – PaxBin

+0

SELECT DISTINCT t.ticket_id,t.id FROM車票噸 WHERE NOT EXISTS( SELECT 1 FROM T1門票WHERE t.timestampp PaxBin

相關問題