【问题标题】:SQL query removing duplicates & pulling random resultsSQL 查询删除重复项并拉取随机结果
【发布时间】:2017-05-30 17:18:58
【问题描述】:

所以我四处寻找答案,但我无法找到解决我所面临的这个难题的答案。我有一个查询可以成功撤回 X 数量的随机帐户或不同的帐户。但是,我想将这两者组合成一个 SQL 查询,而不是两个。因此,我将从特定时间范围拉回交易数据,直到我需要拉回没有重复帐户的位置,然后从那些非重复帐户中,从该列表中选择 X 个随机帐户。

目前,这是我的查询:

SELECT TOP 75 [Account]
FROM table
ORDER BY NEWid()

我尝试将 DISTINCT 放入其中,但找不到合适的放置位置。

现在,是的,我知道我可以在 excel 中完成所有这些工作。但是,为了自动化和加快流程,我想通过 SQL 来完成。

【问题讨论】:

  • 这是怎么随机的?
  • 你是对的。我确实忘记了一行代码。那将是 newid() 的顺序。感谢您指出了这一点。 OP 已编辑。
  • 您使用的是哪个 DBMS?
  • 微软 SQL Server 2012R2

标签: sql duplicates distinct


【解决方案1】:

你没有说你使用的是什么平台,除了 TOP X 是 MSSQL

我猜你想要这个

SELECT TOP 25 *
FROM (
  SELECT DISTINCT [Account]
  FROM table
) x

但是,当您使用 DISTINCT 时,我认为任何平台都不会以随机顺序返回结果 - 考虑一下...您必须进行排序以使其不同。

所以你可以让它随机排序...

SELECT TOP 25 *
FROM (
  SELECT DISTINCT [Account]
  FROM table
) x
ORDER BY newid()

但是这会很慢——如果只是你不关心顺序,那么不要使用这种随机化技巧。

【讨论】:

  • 感谢您的回答。我不在乎顺序,不。这对我来说没什么大不了的。但是,我已经尝试了您上面的代码,并且它确实有效(我很高兴)。我只是又出现了一个小问题,我不知道为什么。这是当前的代码:SELECT TOP 75 [Account] FROM (Select distinct [Account] FROM table where TransDate>='2017-5-1') x order by NEWid() 问题发生在“where”语句中。我需要根据特定的日期范围来隔离被拉回的数据。对此有何建议?再次感谢。
  • 好的,看来问题是我添加了一个额外的括号。它现在可以正常运行。感谢你的回答。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2011-12-09
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多