2012-12-10 63 views
0

我有一個簡單的表稱爲sales的列選擇客戶最近5次銷售?

createdon, saleid, customerid 

其他表我有customer表列

customerid, name, etc.. 

現在我需要最後5個銷售由客戶端,

在其他表

稱爲scanned我有

scannedid,saleid,customerid 

我相信我需要有客戶的最後5個salesid,因爲我得到了客戶 在最近5次銷售中被掃描的情況(銷售不是同一天,例如,星期一某個客戶被星期一訪問,而其他星期二和星期四但這些信息是不是在這個例子中很重要)

我真正的問題是

如何獲得這在他們的最後5個銷售掃描customersid?

對於我相信我需要查詢由客戶 得到最後5 salesid爲example.i有3個客戶,那麼我就需要近5個銷售customer1表,customer2表,並customer3的,然後我將有15個saleid返回

+0

很難理解你想要的東西。你能否給我們一小組樣本數據,以及你想從這些數據中得到的輸出樣本? – Blorgbeard

+0

選擇customerid的最後5個salesid不使用循環@Blorgbeard – angel

+0

您正在使用哪些DBMS?甲骨文? PostgreSQL的? DB2? –

回答

1

由客戶,我假設你的意思customerid。我想你想要銷售的前五個記錄,基於創建日期的降序排列。確切的語法取決於數據庫。這裏有一種方法:

select top 5 customerid 
from sales s 
order by createdon desc 

而另一種方式:

select customerid 
from sales s 
order by createdon desc 
limit 5 

而另一種方式:

select * 
from (select customerid, rownum as seqnum 
     from sales 
     order by createdon 
    ) s 
where seqnum <= 5 

現在你已經明確你想要的東西,很容易:

select * 
from (select s.*, 
      row_number() over (partition by customerid order by created on desc) as seqnum 
     from sales s 
    ) s 
where seqnum <= 5 
+0

這不是我所需要的,我需要爲每個客戶,他最近的5次銷售 – angel

+0

@angel。 。 。這極大地說明了你需要什麼。查看修訂答案的最後部分。 –

+0

最後一部分我想要的回報! – angel