DB2-行数函数-需要输出中的第一个分区行

DB2-行数函数-需要输出中的第一个分区行,db2,row-number,Db2,Row Number,我尝试了下面的SQL,但它不起作用 问题:它没有给出第一个分区行 我正在添加表详细信息和SQL。这是针对DB2数据库的 Books Table: book_id rating title isbn publisher_id WITH cte_books AS ( SELECT publisher_id, ROW_NUMBER() OVER ( PARTITION BY publisher_id

我尝试了下面的SQL,但它不起作用

问题:它没有给出第一个分区行

我正在添加表详细信息和SQL。这是针对DB2数据库的

Books Table:  
book_id  
rating 
title 
isbn 
publisher_id


WITH cte_books AS (
    SELECT
        publisher_id,
        ROW_NUMBER() OVER (
            PARTITION BY publisher_id 
            ORDER BY rating DESC
        ) row_num,
        book_id, 
        rating,
        title
    FROM 
        books
    WHERE 
        publisher_id IS NOT NULL
)
SELECT 
  * 
FROM 
    cte_books
WHERE 
    row_num >= 1 AND 
    row_num >= 2;
实际上是
行数>=2

 WHERE 
         row_num = 1
将返回第一行

编辑: 如果您希望为那些有多行的人提供所有行,这是一种方法:

WITH cte_books AS (
    SELECT
        publisher_id,
        ROW_NUMBER() OVER (
            PARTITION BY publisher_id 
            ORDER BY rating DESC
        ) row_num,
        book_id, 
        rating,
        title
    FROM 
        books
    WHERE 
        publisher_id IS NOT NULL
)

SELECT * 
  FROM cte_books t 
 WHERE exists (SELECT 1 
                 FROM cte_books 
                WHERE row_num > 1 
                  AND pubisher_id = t.publisher_id)

ROW_NUMBER()
更改为
COUNT(1)
,删除
ORDER BY
,并在ROW_num>1的位置使用
。嗨,Mike,我需要输出至少有2个分区的发布者id记录。row_num=1对我不起作用。好的,谢谢你的澄清-我已经编辑了我的答案-检查是否可以修改此SQL以提供输出,其中row_num=1还将显示至少有两个分区的记录?我已将CTE添加到我的答案中-我不理解你的评论-它将为有分区的记录显示所有记录不止一个出版商叫迈克!这正是我想要的。谢谢!
WITH cte_books AS (
    SELECT
        publisher_id,
        ROW_NUMBER() OVER (
            PARTITION BY publisher_id 
            ORDER BY rating DESC
        ) row_num,
        book_id, 
        rating,
        title
    FROM 
        books
    WHERE 
        publisher_id IS NOT NULL
)

SELECT * 
  FROM cte_books t 
 WHERE exists (SELECT 1 
                 FROM cte_books 
                WHERE row_num > 1 
                  AND pubisher_id = t.publisher_id)