计算日期之间的分钟数并获得前10名

时间:2013-02-27 17:38:46

标签: sql oracle plsql

所以我有一个包含两个不同日期的表格,我选择的是分钟差异:

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

之后我想只获得分数最多的前五名,比如

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

如何做到这一点?

2 个答案:

答案 0 :(得分: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 Fiddle Demo

答案 1 :(得分:0)

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