2016-03-31 69 views
0

我想提取每組的前1行。我很新的MySQL和不太清楚如何限制Mysql限制排行榜前1排

表clientcontracts

Client Products contract_date 
A  pepsi  13/02/16 
A  Cola  11/01/16 
A  fanta  22/03/16 
B  pepsi  15/01/16 
B  Cola  18/01/16 
B  fanta  12/03/16 
c  pepsi  15/03/16 
c  Cola  18/03/16 
c  fanta  10/02/16 

我都做了,

select Client,Products,contract_date 
from clientcontracts 
group by Client,Products,contract_date 
order by client,contract_date asc 
limit 1 

我在下面提供的實際和預期的輸出。非常感謝

>  Actual output: 
>  A Cola 11/01/16 
>  
>  What i want: 
>  
>  A Cola 11/01/16 
>  B pepsi 15/01/16 
>  C fanta 10/02/16 
+0

表中的列字段名稱是什麼? – Lachie

+0

'contract_date'的類型是什麼?它是一個適當的MySQL類型? – Loufylouf

+0

Hi @Lachie,contract_date的類型是時間戳 –

回答

1

我假設你想按照客戶的最小日期進行分組?

SELECT Client, Products, contract_date 
FROM clientcontracts 
GROUP by Client 
ORDER BY Client, contract_date ASC 
+0

我正在嘗試查找最早的合同日期和客戶端使用的產品。 –

+0

Hi @ sef4eg:這比我想象的更簡單..我可以實際上按客戶進行分組,並且它可以工作。謝謝:) –

+0

@ChristopherRajendran這正是我所做的;)你非常歡迎 –

0

給那個機會。它選擇所有行,對其進行排序,從1到n將每個組編號並僅顯示nr = 1的行。

SELECT @nr:= IF(@lastval = (@lastval:=concat(`Client`,'-',contract_date)) , @mnr:[email protected]+1, 1) AS nr 
    , m.* 
    FROM (
     SELECT CLIENT, Products, contract_date 
     FROM clientcontracts 
     ORDER BY `Client`, contract_date ASC 
    ) AS m 
    CROSS JOIN (SELECT @nr:=0 , @lastval:='') AS parameter 
    WHERE nr = 1;