【问题标题】:How to retrieve different data from same sql query while we execute query simultaneously? [closed]当我们同时执行查询时,如何从同一个 sql 查询中检索不同的数据? [关闭]
【发布时间】:2019-11-28 11:47:18
【问题描述】:

当我们在两个或三个不同的窗口中执行相同的查询时,我想从相同的查询中检索不同的记录。

前。 select top 10 * from Person

这个查询我将在两个或三个窗口中同时执行,我想在所有结果中检索不同的记录。

【问题讨论】:

  • 当您说“不同的记录”时,您的意思是您每次都想要相同的两组 10 条记录,还是每次执行查询时要获得 10 条随机记录?
  • 我想从两次执行中获得 10 - 10 条不同的记录。两个结果中没有一条记录相同。
  • 当你说“没有一条记录在相同的结果中”时,你的意思是你不能在两组之间有重叠?这显着地改变了潜在的答案。您需要在原始帖子中阐明您的要求。例如“我需要返回 10 条以前同一查询从未返回过的记录”。但那是从一开始,就在过去的一个小时内,还是只针对当前的两次处决?根据这些要求,可以采用多种方式,具有不同的复杂性。

标签: sql sql-server sql-order-by


【解决方案1】:

Order By NewID 将为您提供一组随机的行。 但是,它们很可能是不同顺序的相同行(如果表中的行数为 10 或更少)

SELECT TOP 10 * 
FROM Person
ORDER BY NewID();

【讨论】:

    【解决方案2】:

    你必须放 ORDER BY 子句。否则会取一些随机值。

    select top 10 * 
    from Person
    order by 1 ASC
    

    第二个窗口,使用这个。

    select top 10 * 
    from Person
    order by 1 DESC
    

    【讨论】:

    • 如果我想要 3 个不同的结果该怎么办?
    【解决方案3】:

    要获得 3 种不同的结果,请使用所有可能的情况:

    SELECT TOP 10 * FROM Person p ORDER BY 1 ASC
    SELECT TOP 10 * FROM Person p ORDER BY 1 DESC
    SELECT TOP 10 * FROM Person p ORDER BY NewID()
    

    或:

    select  * from Person  where IDPerson in 
    (select top 10 IDPerson  from Person   order by newid())
    

    【讨论】:

      【解决方案4】:

      如果您不在乎检索哪些行,只在三个查询中没有重复项,请使用表 ID 的模数:

      select top 10 * from person where id % 3 = 0;
      select top 10 * from person where id % 3 = 1;
      select top 10 * from person where id % 3 = 2;
      

      或者使用某种顺序得到第一、二、三十行:

      select top 10 * from person order by id offset 0 rows fetch next 10 rows;
      select top 10 * from person order by id offset 10 rows fetch next 10 rows;
      select top 10 * from person order by id offset 20 rows fetch next 10 rows;
      

      后者也可以通过ROW_NUMBER实现。

      【讨论】:

        【解决方案5】:

        您可以在之间使用。例如。 select top 10 * from Person where PersonId between <val1> and <val2> 假设您有一个 Id 或列或类似的东西。您可以更改三个或更多查询的范围。

        【讨论】: