1

所以我有一个包含两个不同日期的表,我选择了以下之间的分钟差:

    select customerID, customers.telNumber,
   sum(round((enddate - startdate) * 1440)) over (partition by telNumber) total_mins
    from table;

之后,我只想获得分钟数最多的前 5 名,例如

     rank() over (partition by total_mins order by total_mins)

一个人会怎么做呢?

4

2 回答 2

1

像这样的东西应该适合你:

SELECT * 
FROM (
  SELECT customerId, telNumber, rank() over (order by total_mins) rnk
  FROM (
    SELECT customerId,telNumber,
     sum(round((enddate - startdate) * 1440)) over (partition by telNumber) total_mins
    FROM YourTable
  ) t
) t
WHERE rnk <= 10

这将使您获得联系,因此它可以返回超过 10 行。如果您只想返回 10 行,请使用ROW_NUMBER()而不是RANK().

SQL 小提琴演示

于 2013-02-27T17:51:00.190 回答
0

我会在 sgeddes 的示例中添加 rank() 和 row_number() 的组合是最好的,因为 rank() 可能会为所有或几行返回相同的排名值。但是 row_number() 总是不同的。我会在 Where 子句中使用 row_number(),而不是 rank()。

于 2013-02-27T17:54:49.983 回答