sql - 按组选择一个随机行(Oracle 10g)
问题描述
这篇文章与这个帖子相似,因为我每组有多个观察结果。但是,我只想随机选择其中一个。我也在开发 Oracle 10g。
person_id
表中的每行有多行df
。我想对每组person_id
s进行排序,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 列表中允许使用窗口函数。而且,窗口函数不能作为另一个窗口或组函数的参数。
解决方案
一种选择是使用WITH..AS
Clause :
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
推荐阅读
- javascript - 如何触发您的 Jquery 对话框(弹出窗口)
- python - Python CSV 文件
- python - 无法在详细视图中返回写入上下文
- c# - GraylogHttp 不从 Common Logging 扩展格式化字符串
- php - 根据对象数组中的值创建或重新排序数组
- google-cloud-platform - 使用 istio-gateway 设置 GKE 的健康检查问题
- google-analytics - 创建仅显示子域流量的 Google Analytics(分析)视图?
- python - 使用 PyTorch 和 TorchVision 对自定义数据集进行训练-有效-测试拆分
- mysql - MySQL:计算属于活跃类别的活跃产品(以及可选的活跃子类别)
- python - 下面的例子有什么区别