2016-03-31 9 views
0

各グループの先頭1行を抽出しようとしています。私はグループごとにMysqlの上限1行を制限する

select Client,Products,contract_date 
from clientcontracts 
group by Client,Products,contract_date 
order by client,contract_date asc 
limit 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 

私が行っているを制限する方法についてのMySQLに非常に新しく、あまりにも確信している私には、以下の実際と予想される出力を提供しています。多くのありがとう

>  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

こんにちは@Lachie、contract_dateのタイプはタイムスタンプ –

答えて

1

私はあなたが最低の日付でクライアントにグループに分けたいですか?

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

私は最も早い契約日とクライアントが使用する製品を探しています。 –

+0

こんにちは@ 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; 
関連する問題