2017-07-15 131 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服務器:newid()
  • Postgres的:random()
  • 甲骨文:dbms_random.value
  • 的Teradata:random(1, 999999999)
  • DB2: rand()
  • SAP HANA:rand()
+0

感謝它的工作。你能解釋一下'where seqnum = 1'的用法嗎?這是否意味着第一行? – Sai

+1

@Sai。 。 。這意味着每個客戶訂單組中的第一行。訂單是隨機排序的,所以「第一個」並不涉及某個特定的行。 –

+0

是的,我明白了。非常感謝你。 – Sai