私は以下のようにいくつかの価格について平均を計算する必要があります。私はそのテーブル内の各レコードについてこれを行うことができますが、最初の5つの最新の日付レコードでのみこれを実行したい場合はどうすればいいですか?以下のクエリはその平均を提供しますが、すべてのものについては、私はトップ5のデート日付を探しています。これは、おそらくrow_number()を使用して解決することができますが、私はそのテーブル内のレコードのトンがあり、row_numberは一度に各行を処理するように遅すぎる可能性がありますこれを行うより良い方法はありますか?私はこれをSQLServer DB BTWでやろうとしています。同じテーブル内のレコードごとに上位5の平均をどのように得るのですか
select a.id, AVG(a.someprice) as avgPrice
from
(select p.id, p.date, calculateSomePrice(p.id, p.date) someprice
from table1 p
where p.id in (select id from table1)) a
group by a.id
;
私が探しているものを明確にすることができるテーブルの例レコードを教えてください。私たちは、私のクエリ上で実行すると
id date prc
1 08/02/2017 1.5
1 08/01/2017 2.5
1 07/31/2017 3.5
1 07/30/2017 1
1 07/29/2017 4
1 07/23/2017 4.5
1 07/20/2017 5
1 07/22/2017 5.5
2 07/29/2017 1.5
2 07/28/2017 2.5
2 07/27/2017 4
2 07/26/2017 4
2 07/23/2017 5.5
2 07/22/2017 3.5
2 07/21/2017 5
2 07/20/2017 0.5
2 07/18/2017 4.5
は今、私たちは、すべてのレコードのためにすべての平均値を取得するが、私は探しています何のことは、各IDの日付ごとのトップ5の平均。この場合、1と2の両方の場合。
以下のクエリでは、私が探しているid1の結果が得られますが、私のテーブルのすべてのIDに対してこれを行う必要があり、テーブルに481397362のレコードがあるので、ループでこれを行うのは理にかなっていません。
select a.id, AVG(a.somePrice)
from (
select top 5 p.id, p.date, calculateSomePrice(p.id, p.date) somePrice
from table1 p
where p.id = 1
order by p.date desc) a
group by a.id;
これが何を行うことになっている: 'p.id)TABLE1からIDを選択する(中)A'? 'p'は' table1'のエイリアスなので、ロジックは不要です。 –
@ Gordon Linoff、私はtable1内のすべてのIDの平均を計算したいので、そのテーブルからすべてのIdを取得し、それらの計算を価格で実行し、groupで親クエリの平均を計算するよりも必要です。ここでの唯一の問題は、同じテーブル内のすべてのIDの日付ごとの上位5つの結果のみをこの平均値として計算したい場合、そのIDの結果セット全体についてこれを計算していることです。 – user3314492
idに関係なく、id? ので、ID 1のためのあなたの結果である [ID日付PRC] [1 2017年7月22日5.5] [1 2017年7月20日5] [1 2017年7月23日4.5] [1 07/29/2017 4] [1 07/31/2017 3.5] これは間違いありませんか? –