sql-server - 每组代码从表中选择 n 个随机行
问题描述
我有一张表格,里面有保险单或报价单中的客户详细信息。每个都分配了一个与营销活动相关的输出代码,每个代码出现 4 次,每个“批次”一个,仅代表一个月中的一周。我需要为每个代码、每个批次号 (1-4) 随机选择 25% 的行放入另一个表中,这样我就可以保留这些行并防止向客户推销。
到目前为止,我在堆栈上看到的所有解决方案都指示如何在初始 CTE 查询中使用 ROW_NUMBER 对每个组的特定行数执行此操作,然后从中选择 rn <= 给定数字。我需要这样做,但要选择每组的 25%。
我已经尝试过这个解决方案,但具体的行号并没有让我更进一步;
使用链接的解决方案,这就是我的代码目前没有完整的 where 子句的方式,因为我知道这不是我所需要的。
;WITH AttributionOutput AS (
SELECT [Output Code], BatchNo, MonthandYear
FROM [dbo].[Direct_Marketing_UK]
WHERE MonthandYear = 'Sep2019'
And [Output Code] NOT IN ('HOMELIVE','HOMELIVENB','HOMENBLE')
GROUP BY [Output Code], BatchNo, MonthandYear
HAVING COUNT(*) >= 60
)
, CodeandBatch AS (
SELECT dmuk.PK_ID,
dmuk.MonthandYear,
dmuk.PackNo,
dmuk.BatchNo,
dmuk.CustomerKey,
dmuk.URN,
dmuk.[Output Code],
dmuk.[Quote/Renewal Date],
dmuk.[Name],
dmuk.[Title],
dmuk.[Initial],
dmuk.[Forename],
dmuk.[Surname],
dmuk.[Salutation],
dmuk.[Address 1],
dmuk.[Address 2],
dmuk.[Address 3],
dmuk.[Address 4],
dmuk.[Address 5],
dmuk.[Address 6],
dmuk.[PostCode],
ROW_NUMBER() OVER(PARTITION BY dmuk.[Output Code], dmuk.BatchNo ORDER BY newid()) as rn
FROM [dbo].[Direct_Marketing_UK] dmuk INNER JOIN
AttributionOutput ao ON dmuk.[Output Code] = ao.[Output Code]
AND dmuk.BatchNo = ao.BatchNo
AND dmuk.MonthandYear = ao.MonthandYear
)
SELECT URN,
[Output Code],
[BatchNo]
FROM CodeandBatch
WHERE rn <=
我看不出 ROW_NUMBER() 如何帮助我从输出代码和批次号的每个组合中获取 25% 的行。
解决方案
我建议您为此查看 NTILE。
推荐阅读
- python - 逐对比较列之间的行值
- excel - 使用 VBA 在多台计算机上打开受保护的工作簿
- linux - x86_64 系统调用打印程序忽略换行字节 0Ah
- excel - VBA 查找和偏移
- sql - 从 1 个表中查找 ID 并从具有时间条件 SQL 的另一个表中查找相同的 ID
- javascript - Javascript中奇怪的迭代变量范围
- android - 从 ArrayAdatper 的 GetView 方法中检索 LayoutInflater 时是否应该使用父级的上下文?
- amazon-web-services - 使用 AWS 承担角色执行 Terraform 应用
- recursion - 递归算法的时间复杂度
- vba - VBA Word在插入文本时避免换行