2013-10-30 62 views
0

我需要從巨大的事務數據庫中選擇所有購物者的代表性樣本,以便這些購物者的所有交易都包含在樣本中。如何選擇SQL中的隨機ID中的隨機ID和所有事務

表:消費者的

UserID TransId 
1   1 
1   2 
1   3 
2   1 
2   2 
3   1 
4   1 
4   2 
4   3 
4   4 

50%樣本:

UserID TransId 
2   1 
2   2 
4   1 
4   2 
4   3 
4   4 

我怎樣寫R中的SQL查詢?該表位於MS SQL Server中。

回答

2

有很多不同的方法可以從R連接到SQL數據庫。我個人最喜歡的是RODBC包。

RODBC開始,可以使用sqlQuery()函數將SQL查詢傳遞給各種數據庫,前提是它們接受ODBC連接。

以下代碼將加載RODBC庫,並指定一個名爲con的連接,並使用該連接從名爲MyTable的表中選擇所有記錄。

library(RODBC) ###Load library 

con <- odbcConnect("POC") ###Assign database connection 

sqlQuery(con, "select * from MyTable") 

對於您當前的問題,我將使用SQLServer 2005及更高版本上提供的tablesample函數。有很多方法可以做到這一點,但是下面通過內部聯接將表加入到它自己的子查詢中(即50%的樣本)。

查詢會是這個樣子:

select distinct 
    rnd.UserID, TransID 
from MyTable 
    join (select UserID 
     from MyTable 
     tablesample (50 percent)) rnd 
    on rnd.UserID = MyTable.UserID 
order by rnd.UserID 

,您可以通過sqlQuery()如下:

sqlQuery(con, 
    "select distinct 
     rnd.UserID, TransID 
     from MyTable 
     join (select UserID 
      from MyTable 
      tablesample (50 percent)) rnd 
     on rnd.UserID = MyTable.UserID 
     order by rnd.UserID") 

這應該讓你的用戶id從MyTable 50%的僞隨機樣本對於給定的UserID,每個唯一的TransID