首页 > 解决方案 > 按组选择一个随机行(Oracle 10g)

问题描述

这篇文章与这个帖子相似,因为我每组有多个观察结果。但是,我只想随机选择其中一个。我也在开发 Oracle 10g。

person_id表中的每行有多行df。我想对每组person_ids进行排序,dbms_random.value()并从每组中选择第一个观察值。为此,我尝试了:

select
    person_id, purchase_date
from
    df
where
    row_number() over (partition by person_id order by dbms_random.value()) = 1

查询返回:

ORA-30483:此处不允许使用窗口函数 30483. 00000 - “此处不允许使用窗口函数” *原因:仅在查询的 SELECT 列表中允许使用窗口函数。而且,窗口函数不能作为另一个窗口或组函数的参数。

标签: sqloraclerandomgroup-byoracle10g

解决方案


一种选择是使用WITH..ASClause :

WITH t AS
(
 SELECT df.*,
        ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY dbms_random.value()) AS rn    
   FROM df
)    
SELECT person_id, purchase_date
  FROM t
 WHERE rn = 1
 

推荐阅读