1

したがって、2つの異なる日付を保持するテーブルがあり、次の間の分の差を選択しています。

    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()がすべてまたは少数の行に対して同じランク値を返す可能性があるため、rank()とrow_number()の組み合わせが最適であると付け加えます。ただし、row_number()は常に異なります。私は、rank()ではなく、Where句でrow_number()を使用します。

于 2013-02-27T17:54:49.983 に答える