我正在使用 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/