【问题标题】:Get Random Selection of Rows Equal Number Per Grouping随机选择每个分组数量相等的行
【发布时间】:2011-10-02 15:43:12
【问题描述】:

我有一个表SCCalls,其中有一列Call_CalT_CodeCall_CalT_Code 可以是几个不同的值之一。它还有一列 Call_InDate 我将作为过滤依据。

我需要总共获得 1000 条随机记录(由 Call_InDate 过滤),平均分配给每个 Call_CalT_Code

我该怎么做?

编辑 (gbn):解决方案必须适用于 SQL Server 2005 上兼容模式为 80 的数据库

【问题讨论】:

  • SQL Server 2000 比较复杂。你确定标签是正确的吗?这是“每个 Call_CalT_Code 1000”还是“总共 1000”。不清楚..这两个请求是互斥的...
  • 是的,数据在 2000 年。它每晚都复制到 2005 年的服务器上,但它以 2000 年的兼容模式运行(我知道!)。
  • @gbn,总共有 1000 个,请随意编辑以使其更清晰,不知道我该怎么做。
  • 这意味着它仍然是 SQL Server 2005,除了一些奇怪的地方
  • @gbn,啊,谢谢。编辑了标签。

标签: sql-server-2005 tsql sql-server-2000


【解决方案1】:

您可能需要玩弄分区中的数字。

如果您有 9 个值,则 1000/9 = 111,因此您只能返回 999 行。所以我用了1100和后来的TOP 1000。

SELECT TOP 1000
   *
FROM
   (
   SELECT
       *,
       ROW_NUMBER() OVER (PARTITION BY Call_CalT_Code ORDER BY NEWID()) AS rn
    FROM
       MyTable
      ) foo
WHERE
    rn <= 1100 / (SELECT COUNT(distinct Call_CalT_Code) FROM MyTable)
ORDER BY
    rn

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2013-09-03
    • 2014-04-23
    相关资源
    最近更新 更多