我们已请求向外部公司提供一些数据。
他们只需要一个数据样本,简单吗?错误的。

这是他们的抽样标准:



请有人告诉我在SQL中如何(如果)可能发生这种情况。

最佳答案

如果您使用ROW_NUMBER(),则可以相对轻松地完成此操作。

SELECT
  *
FROM
(
  SELECT
    ROW_NUMBER() OVER (ORDER BY a, b, c, d) AS record_id,
    *
  FROM
    yourTable
)
  AS data
WHERE
  (record_id + 360) % 720 = 0
ROW_NUMBER()为您的所有数据提供一个顺序标识符(这很重要,因为id字段必须既是唯一的又没有任何空格)。它还在(ORDER BY a, b, c, d)中定义了您想要数据的顺序。

使用该ID,如果您使用Modulo(通常是%运算符),则可以测试记录是第720个记录,第1440个记录等(因为720%720 = 0)。

然后,如果将id值偏移360,则可以更改结果集的起点。

编辑

重新阅读问题后,我看到您不希望每第720条记录,而是统一选择了720条记录。

因此,将720替换为(SELECT COUNT(*) / 720 FROM yourTable)
并将360替换为(SELECT (COUNT(*) / 720) / 2 FROM yourTable)
编辑

忽略四舍五入条件将允许精确的720条记录的结果。这需要使用非整数值,并且模的结果小于1。
WHERE
  (record_id + (SELECT COUNT(*) FROM yourTable) / 1440.0)
  %
  ((SELECT COUNT(*) FROM yourTable) / 720.0)
  <
  1.0

关于SQL数据采样,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9413371/

10-11 03:33