Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie GROUP BY z FIRST_VALUE i LAST_VALUE

SELECT 
    MIN(MinuteBar) AS MinuteBar5,
    Opening,
    MAX(High) AS High,
    MIN(Low) AS Low,
    Closing,
    Interval
FROM 
(
    SELECT FIRST_VALUE([Open]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 ORDER BY MinuteBar) AS Opening,
           FIRST_VALUE([Close]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 ORDER BY MinuteBar DESC) AS Closing,
           DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 AS Interval,
           *
    FROM #MinuteData
) AS T
GROUP BY Interval, Opening, Closing

Rozwiązanie zbliżone do Twojego obecnego. Są dwa miejsca, w których popełniłeś błąd.

  1. PIERWSZA_WARTOŚĆ I LAST_WARTOŚĆ to Funkcje analityczne , które działają na oknie lub partycji, a nie na grupie. Możesz uruchomić samodzielnie zagnieżdżone zapytanie i zobaczyć jego wynik.
  2. LAST_VALUE to ostatnia wartość bieżącego okna, która nie jest określona w zapytaniu, a okno domyślne to wiersze od pierwszego wiersza bieżącej partycji do bieżącego wiersza . Możesz użyć FIRST_VALUE z kolejnością usuwania pozycji lub określić okno

    LAST_VALUE([Close]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 
                ORDER BY MinuteBar 
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Closing,
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL NIE MA prawdopodobnie problemów z wydajnością

  2. Pomysłowe narzędzie SQL Password Changer do resetowania hasła SQL

  3. Jak zmienić numer sekwencyjny konta pocztowego bazy danych w profilu w programie SQL Server (T-SQL)

  4. Mapowanie znaków / wyszukiwanie i zamiana znak po znaku w SQL Server 2008 R2

  5. sql cross join - jaki pożytek z tego znalazł ktoś?