【问题标题】:SQL server random row for each unique result in column列中每个唯一结果的 SQL Server 随机行
【发布时间】:2015-12-27 12:25:19
【问题描述】:

我有一个包含多个同事姓名及其销售交易的表。一天结束的时候,一个同事可能有 100 条销售记录,我需要为每个同事随机挑选一个

例如,如果当天有 100 位同事在工作,则结果将为每位同事提供 1 条随机记录,总共返回 100 条

我查看了 newid(),但不知道如何为每位同事返回 1 条记录

【问题讨论】:

标签: sql-server tsql


【解决方案1】:

你可以试试这样的:

WITH summary AS (
    SELECT o.id, 
           o.client, 
           o.ammount, 
           ROW_NUMBER() OVER(PARTITION BY o.id
                                 ORDER BY NEWID()) AS rn
      FROM orders o)
SELECT s.*
  FROM summary s
WHERE s.rn = 1

【讨论】:

  • 不应该是WHERE s.rn = 1,而不是WHERE s.rk = 1吗?
  • Rn 在本例中始终为 1?
【解决方案2】:

假设你的表名为Sale,它有一个列Salesman_ID,那么你可以这样写:

SELECT * 
  FROM Sale
 WHERE Salesman_ID = (SELECT TOP 1 Salesman_ID 
                        FROM Sale Sale2 
                       WHERE Sale2.Salesman_ID = Sale.Salesman_ID 
                       ORDER BY NEWID())

对于每个唯一的Salesman_ID,您只能从与该Salesman_ID 对应的行组中获得一个随机行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2014-08-04
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多