2013-02-27 74 views
1

所以我有一个拥有两个不同的日期,我选择之间的分差表:计算日期之间分钟,并得到前10

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) 

怎么会这样做呢?

回答

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

+0

非常感谢你,只是我需要:) – junkystu 2013-02-27 18:03:55

+0

@junkystu - np,很高兴我们可以帮忙! – sgeddes 2013-02-27 18:04:46

0

我会增加sgeddes的例子秩()和ROW_NUMBER()的组合是最好的秩()可用于所有或几行返回相同的等级值。但row_number()将始终不同。我会在Where子句中使用row_number(),而不是rank()。

相关问题