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

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

田曜瑞
2023-03-14
问题内容

我正在使用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子句中,则我将返回每笔付款的一行。我敢肯定,我忽略了显而易见的事情。有什么帮助吗?


问题答案:

试试这个:

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


 类似资料:
  • 受此启发,如何从DynamoDB获取每个主分区键的最新数据? 我在迪纳摩有一张桌子。它存储帐户统计信息。帐户统计数据可能每天更新几次。因此,表记录可能如下所示: ------------ -------------- ------- ------- |account_id|record_id|视图|星| ------------ -------------- ------- ------- |3|

  • 我有一个数据帧,我根据-列进行分组。对于每个组,我想得到包含最大值的行(整行,而不仅仅是值)。我能够做到这一点,首先获得每个组的最大值,然后创建一个过滤器数组,然后在原始数据帧上应用过滤器。像这样, 这个解决方案是可行的,但不知何故似乎过于繁琐。有人知道更好的方法吗?最好是一条线。关于潜在的重复,我稍后会处理这些:)

  • 如何获得包含每个分组集的最大值的行? 关于这个问题,我见过一些过于复杂的变体,但没有一个有好的答案。我试着举一个最简单的例子: 给出一个类似下面的表,包含person,group,和age列,如何得到每个组中最年长的人?(一组内的平局应给出第一个按字母顺序排列的结果) 所需的结果集:

  • 在SQL中,如何按查询分组获取计数中的最小/最大日期? 查询: --这并没有给出文件的最小和最大接收日期 预期输出...与SourceId、Count、StartDate(最小值)、EndDate(最大值)一起

  • 问题内容: 如何获得包含每个分组集最大值的行? 我在这个问题上看到了一些过于复杂的变体,但都没有一个很好的答案。我尝试将最简单的示例放在一起: 给定下面的表格,其中包含“人员”,“组”和“年龄”列,您将如何获得每个组中年龄最大的人?(组内的平局应该给出第一个字母顺序的结果) 所需的结果集: 问题答案: 在mysql中有一种超简单的方法: 这工作,因为在MySQL中你被允许 不 聚集非组逐列,在这种

  • 我有两个数组 它们的长度都是4。City保存每个城市的名称,temp保存每个城市的平均温度。温度中的温度与城市中的城市顺序相同。所以我的问题是,我怎样才能得到temp中最大int的索引?我想打印出来