当前位置: 首页 > 面试题库 >

不区分ROW_NUMBER()的SQL Server DISTINCT分页

皇甫德庸
2023-03-14
问题内容

好的,因此基本上我DISTINCT通过使用变得无用ROW_NUMBER(),我需要避免这种情况,因为这会导致重复的结果(当然,除了唯一的数字!)

因此,我要寻找的是一个查询,该查询将保持相​​同,但没有重复的行,因为num是唯一的:

WITH t AS
(
   SELECT DISTINCT *, ROW_NUMBER() OVER (ORDER BY Date) AS num 
   FROM Original_Import 
   LEFT JOIN eqcas.dbo.BASE_PROXY_VIEW_WITHTARGET ON ADName = Targetuser
   WHERE (BaseProxy = 'agmc' OR ADName = 'agmc')
      AND (Commited IS NULL OR Commited = 0)
)
SELECT DISTINCT ID, num, ADName, Description_User, Description_Amex, Amount, Date
FROM t 
WHERE (t.BaseProxy = 'agmc' OR t.ADName = 'agmc') 
   AND num BETWEEN 0 AND 20
   AND (Commited IS NULL OR Commited = 0)
ORDER BY Date

修复起来可能很琐碎,但由于我不是SQL Server专家,所以我不习惯这些内部查询等。

更新:是的,num用于分页。


问题答案:

好像我晚两年我最近的博客帖子大约ROW_NUMBER()是到SELECT什么DENSE_RANK()是对SELECT DISTINCT。您的CTE必须替换为:

WITH t AS
(
   SELECT DISTINCT *, DENSE_RANK() OVER (ORDER BY Date, ...) AS num 
   FROM Original_Import 
   LEFT JOIN eqcas.dbo.BASE_PROXY_VIEW_WITHTARGET ON ADName = Targetuser
   WHERE (BaseProxy = 'agmc' OR ADName = 'agmc')
      AND (Commited IS NULL OR Commited = 0)
)
SELECT ...

在上面的查询中,DENSE_RANK()ORDER BY子句将需要列出Original_Import和中的所有列BASE_PROXY_VIEW_WITH_TARGET,以重现与DISTINCT关键字相同的顺序。这将为每个重复的记录集分配一个准确的等级,这样DISTINCT可以再次工作。

在引用的博客文章中,我还包含了指向SQLFiddle的链接,该链接在一个更简单的示例中进行了说明。

SELECT DISTINCT
  v, 
  DENSE_RANK() OVER (w) row_number
FROM t
WINDOW w AS (ORDER BY v)
ORDER BY v, row_number


 类似资料:
  • 问题内容: 我正在处理一些Web点击数据,只是在查找带有访问的user_id(按时间戳记)的最新page_name。使用以下代码,将重复user_id,并显示page_name,并以降序排列。但是,我只希望last_click总是=1。完成后的查询将用作较大查询中的子查询。 这是我当前的代码: 问题答案: 您应该能够将查询移至子查询并添加条件:

  • 问题内容: 我的SQL代码有什么问题? 我试图消除此答案之后的重复行 但是我一直收到以下错误: 在“(”附近:语法错误:SELECT rn = ROW_NUMBER()OVER( 这是SQL代码: 我在某处读到它与SQL版本或sqlite3的用法有关? 这里是一些其他有关该问题的信息: 我有一张开始的桌子: 我想最后得到一个没有关于col_2和col_3的复数的表(不关心col_1和col_4是什

  • 我们在AWS上运行16个节点kafka集群,每个节点是m4. xLargeEC2实例,具有2TB EBS(ST1)磁盘。Kafka版本0.10.1.0,目前我们有大约100个主题。一些繁忙的话题每天会有大约20亿个事件,一些低量的话题每天只有数千个。 我们的大多数主题在生成消息时使用UUID作为分区键,因此分区分布相当均匀。 我们有相当多的消费者使用消费群体从这个集群消费。每个使用者都有一个唯一的

  • 整数n的划分是将n写成正整数和的一种方式。对于 例如,对于n=7,一个分区是1 1 5。我需要一个程序来查找所有 使用“r”整数对整数“n”进行分区。例如,

  • 本文向大家介绍SQL Server中row_number分页查询的用法详解,包括了SQL Server中row_number分页查询的用法详解的使用技巧和注意事项,需要的朋友参考一下 ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于

  • 问题内容: 我有一个MS Access数据库,我将需要创建一个SQL查询,该查询使我可以在保留所有值的同时,在一列中选择所有不同的条目。 在这种情况下,一个例子比以往任何时候都更有价值数千个单词: 表: SQL魔术 结果: 基本上,它删除列B的所有唯一值,但保留数据的多行。我可以“按b分组”,然后“计数> 1”以得到不同的字符,但是结果将只列出B的一行,而不是我需要的2或更多行。 有什么帮助吗?