 StockID, Date ve Price sütunlarına sahip bir hisse senedi fiyatları tablosu verildiğinde, her bir hisse senedi için bir hisse senedi fiyatının arttığı ardışık en uzun gün serisini bulmak için bir SQL sorgusu yazın.
Olası bir çözüm şöyle olabilir: ``` SELECT StockID, MAX(run) AS long_streak FROM ( SELECT StockID, Date, Price, ROW_NUMBER() OVER (PARTITION BY BY StockID ORDER BY Date) AS row_num, ROW_NUMBER() OVER (PARTITION BY StockID) , Fiyat ORDER BY Date) - ROW_NUMBER() OVER (PARTITION BY StockID ORDER BY Date) AS run FROM stock_prices ) a GROUP BY StockID, run HAVING MIN(Price) <> MAX(Price) ORDER BY StockID, long_streak DESC; ``` Bu sorgu, artan hisse senedi fiyatlarını belirlemek için üç pencere işlevi kullanır: - `ROW_NUMBER()`, StockID'ye göre gruplandırarak her bir fiyat/tarih kombinasyonuna bir satır numarası atar. - "ROW_NUMBER()", Tarihe göre artan düzende gruplayarak, aynı StockID ve Fiyata sahip her bir fiyat/tarih kombinasyonuna bir satır numarası atar. Bu, fiyatın aynı kaldığı ardışık tarihlerin her bir çalışmasına etkili bir şekilde bir grup kimliği atar. - Bu satır numaralarının çıkarılması, fiyatın arttığı ardışık tarihlerin her dizisi için benzersiz bir tanımlayıcı verir. Ardından, StockID'ye ve çizgi tanımlayıcısına ("çalıştır") göre gruplandırır ve her bir çizginin uzunluğunu "MAX(run)" ile sayarız. `HAVING MIN(Price) <> MAX(Price)` ile fiyatın hiç değişmediği serileri filtreliyoruz ve son olarak, istenen sonucu elde etmek için StockID ve en uzun artan fiyat serisinin uzunluğuna göre sipariş veriyoruz.