所以我有一个包含两个不同日期的表格,我选择的是分钟差异:
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)
如何做到这一点?
答案 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()
。
答案 1 :(得分:0)
我想添加sgeddes的例子,rank()和row_number()的组合是最好的,因为rank()可以为所有或几行返回相同的等级值。但是row_number()总是不同的。我在Where子句中使用row_number(),而不是rank()。