2

私の合計行は可変で固定ではないので、N行があり、5行を1つのグループとして分離し、SQLの次の表の価格の最大値を選択します。各5行で最大値を選択

Date  Price 
20170101 100 
20170102 110 
20170103 90 
20170105 80 
20170109 76 

20170110 50 
20170111 55 
20170113 80 
20170115 100 
20170120 99 

20170121 88 
20170122 98 
2017

だから、最初の5グループで最大の価格は110であり、第2のグループは100で、最後のグループの最大価格はあなたが使用できる120

答えて

1

共通のテーブル式を使用してグループ化します。

WITH CTE AS (SELECT RANK() OVER (ORDER BY Date) AS Rank, Price 
      FROM yourtable) 
SELECT (Rank - 1)/5 AS GroupedDate, MAX(Price) AS MAXPRICE 
FROM CTE 
GROUP BY ((Rank - 1)/5); 

出力

GroupedDate MAXPRICE 
0   110 
1   100 
2   120 

SQLフィドル:http://sqlfiddle.com/#!6/b5857/3/0

+0

が魅力のように働いた以下のようにROW_NUMBER使用することができ、それがの日付を持つことが可能である私に知らせてください選択された価格も? – MahdiIBM

+0

次のようなもの: '20170101 - 20170109 110' – Matt

+0

いいえ - > 20170102 = 110 – MahdiIBM

1

です:

SELECT grp, MAX(Price) AS price 
FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY DATE)/5 AS grp FROM tab) sub 
GROUP BY grp; 

-- OUTPUT 
grp price 
0 110 
1 100 
2 120 

Rextester Demo

*日付が一意であると仮定すると、

EDIT:20170101から20170109 110

SELECT 
    CONVERT(VARCHAR(8),MIN(DATE),112) + '-' + CONVERT(VARCHAR(8),MAX(date),112) 
    , MAX(Price) AS price 
FROM (SELECT *, (ROW_NUMBER() OVER(ORDER BY DATE))/5 AS grp FROM tab) sub 
GROUP BY grp; 

出力::のようなもののように

20170101-20170105 110 
20170109-20170115 100 
20170120-2017

Rextester Demo2

1

あなたは

;With cte as (
Select *, Bucket = Sum(RowN) over(Order by [date]) from (
    Select *, RowN = case when row_number() over(order by [date]) % 5 = 0 then 1 else 0 end from #data1 
) a 
) Select top (1) with ties [Date], [Price] 
from cte 
order by row_number() over (partition by Bucket order by Price desc) 
関連する問題