2017-07-15 22 views
0

私は顧客とその注文のテーブルを持っています。私は各顧客のランダムな注文を選択したいと思います。カスタマーのランダムな注文を選択してください

例テーブル

customer | orders 
---------+--------- 
customerA| Order1 
customerA| Order2 
CustomerA| Order3 
customerB| Order1 
customerB| Order2 
customerB| Order3 
CustomerC| Order1 
customerC| Order2 

結果テーブル

customer | orders 
---------+--------- 
customerA| Order2 
customerB| Order1 
CustomerC| Order1 

は、方法はありますか?

+4

あなたの質問には、使用しているデータベースでタグを付けます。 –

答えて

3

row_number()(およびANSI標準機能)を使用できます。ただし、乱数の計算はデータベースによって異なります。

select t.* 
from (select t.*, 
      row_number() over (partition by customer order by random()) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

一部乱数機能:

  • SQL Serverの:newid()
  • のPostgres:random()
  • オラクル:dbms_random.value
  • のTeradata:random(1, 999999999)
  • DB2ここでの考え方は以下のとおりです。 rand()
  • SAPハナ:rand()
+0

その仕事に感謝します。 'where seqnum = 1'の使い方を説明してください。最初の行を意味するのでしょうか? – Sai

+1

@サイ。 。 。これは、顧客の各注文グループの最初の行を意味します。順序はランダムにソートされるため、「最初の」は特定の行を参照しません。 –

+0

はい私はそれを得た。どうもありがとうございました。 – Sai

関連する問題