admin

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

sql

我正在使用SQL
Server2005。我有一个带有付款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

我没有进行一次精神上的飞跃,然后让我为每个用户选择了最高的paymentNumber。如果我通过使用MAX(paymentNumber)然后将以上内容用作子选择,然后按user_id分组,则会丢失我需要的payment_id。但是,如果我也将payment_id添加到group
by子句中,则我将返回每笔付款的一行。我敢肯定,我忽略了显而易见的事情。有什么帮助吗?


阅读 203

收藏
2021-05-10

共1个答案

admin

试试这个:

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
2021-05-10