sql - 如何获取 SQL Server 中每个组/分区的最大行数?

标签 sql sql-server sql-server-2005 tsql

我正在使用 SQL Server 2005。我有一个包含付款 ID、用户 ID 和时间戳的付款表。我想找到每个用户最近的付款。这很容易搜索并找到答案。我还想知道最近的付款是否是用户的第一次付款。

我有以下内容将对每个用户的付款进行编号:

SELECT
    p.payment_id,
    p.user_id,
    ROW_NUMBER() OVER (PARTITION BY p.user_id ORDER BY p.payment_date) AS paymentNumber
FROM
    payment p

我并没有做出精神上的飞跃,然后让我选择每个用户的最高付款号码。如果我使用 MAX( paymentNumber) 作为子选择,然后按 user_id 分组,我会丢失我需要的 payment_id 。但是,如果我还将 payment_id 添加到 group by 子句中,则每次付款都会回到一行。我确信我忽略了显而易见的事情。有什么帮助吗?

最佳答案

试试这个:

SELECT a.*, CASE WHEN totalPayments>1 THEN 'NO' ELSE 'YES' END IsFirstPayment
  FROM(
                SELECT  p.payment_id,     
                                p.user_id,     
                                ROW_NUMBER() OVER (PARTITION BY p.user_id ORDER BY p.payment_date DESC) AS paymentNumber,
                                SUM(1) OVER (PARTITION BY p.user_id) AS totalPayments
                    FROM payment p 
            ) a
WHERE   paymentNumber = 1       

关于sql - 如何获取 SQL Server 中每个组/分区的最大行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903527/

相关文章:

sql - 什么是动态 SQL 查询?何时需要使用动态 SQL 查询?

mysql - 将两个不同的查询结果添加到一张表中

c# - 如何使用 LINQ 和 Entity Framework 查询具有 'AND' 条件的多对多关系

c# - 使用 LINQ 连接连接表中的列

sql - 将数字转换为 SQL 中的单词

mysql - 使用子查询的结果更新子查询中也引用的表

java - Hibernate + PostgreSQL + 网络地址类型(inet、cdir)

sql - 这段 T-SQL 代码中发生了什么? (连接 SELECT 语句的结果)

c# - 查询获取表列表和列数

sql-server - tablix 'Tablix1' 无效。缺少 DataSetName 属性的值