2013-02-27 76 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()。

相關問題