如何在SQL中选择随机ID和随机ID中的所有事务

时间:2013-10-30 22:45:29

标签: sql r

我需要从庞大的交易数据库中选择所有购物者的代表性样本,以便这些购物者的所有交易都包含在样本中。

表:

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中。

1 个答案:

答案 0 :(得分: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")

对于给定MyTable的每个唯一TransID,这应该会从UserID获得50%的Userid伪随机样本。