2

Mes lignes totales sont variables et non fixes, donc il y a N lignes et je veux séparer chaque 5 lignes en tant que groupe et sélectionnez la valeur maximale du prix dans la table suivante dans SQL.sélectionnez la valeur maximale dans chaque 5 lignes

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

Donc, dans le premier 5 groupe le prix maximum est 110, et le deuxième groupe est 100, et le dernier prix de groupe max est 120.

Répondre

1

Utilisez une expression de table commune pour les regrouper.

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); 

Sortie

GroupedDate MAXPRICE 
0   110 
1   100 
2   120 

SQL Fiddle: http://sqlfiddle.com/#!6/b5857/3/0

+0

travaillé comme un charme, laissez-moi savoir est-il possible d'avoir la date de prix sélectionné aussi? – MahdiIBM

+0

Comme dans quelque chose comme: '20170101 - 20170109 110' – Matt

+0

No like -> 20170102 = 110 – MahdiIBM

1

Vous pouvez utiliser:

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 * En supposant que la date est unique

EDIT:

Comme dans quelque chose comme: 20.170.101 - 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; 

Sortie:

20170101-20170105 110 
20170109-20170115 100 
20170120-2017

Rextester Demo2

1

Vous pouvez utiliser row_number comme ci-dessous

;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)