2

次のようなテーブルがあります。

UID DATE GROUP VALUE

データ型は次のとおりです。

 VARCHAR DATE VARCHAR NUMERIC

例:

abc1000 2012-09-01 1205 1000.0000
abc1000 2012-09-01 1210 1010.0000
abc1000 2012-09-02 1205 1100.0000
abc1000 2012-09-02 1210 1020.0000
def1010 2012-09-01 1205 2000.0000

出力が次のようになるように、一意の「UID + GROUP」ごとに上位 N(15) の値 (VALUE) を見つけて平均化する必要があります。

abc1000 1205 1050.0000
abc1000 1210 1015.0000
def1010 1205 2000.0000
4

2 に答える 2

4
select uid, [group], avg(value)
from
(
 select *,
        row_number() over (partition by uid, [group] order by value desc) rn 
        from yourtable
) v
where rn<=15
group by uid, [group]
于 2012-09-10T13:51:14.990 に答える
0

これはあなたが探しているものですか?AVG関数を使用する必要があります

SELECT TOP 15 [UID], [GROUP], AVG(VALUE) avgValue
FROM tableName
GROUP BY [UID], [GROUP]
ORDER BY avgValue DESC

またはを使用してCTE

WITH cte AS
(
    SELECT [UID], [GROUP], AVG(VALUE) avgValue,
           ROW_NUMBER() OVER (Partition By AVG(VALUE) ORDER BY AVG(VALUE) DESC) as Row_Num
    FROM tableName
    GROUP BY [UID], [GROUP]
)
SELECT [UID], [GROUP], avgValue
FROM cte 
WHERE Row_Num <= 15

これにより、レコードの同じ合計平均がトップ15リストに含まれるようになります。例

1 , rec 1, 100
2 , rec 2, 98
....
....
....
14, recX , 76
15, recY , 76
16, recZ , 76
于 2012-09-10T13:51:23.587 に答える