sql >> Databáze >  >> RDS >> Sqlserver

Použití GROUP BY s FIRST_VALUE a 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

Řešení blízké vašemu současnému. Jsou dvě místa, kde jste udělali chybu.

  1. FIRST_VALUE A LAST_VALUE jsou Analytické funkce , které fungují na okně nebo oddílu místo skupiny. Vnořený dotaz můžete spustit samostatně a zobrazit jeho výsledek.
  2. LAST_VALUE je poslední hodnota aktuálního okna, která není uvedena ve vašem dotazu, a výchozí okno je řádky od prvního řádku aktuálního oddílu po aktuální řádek . Můžete buď použít FIRST_VALUE s pořadím odstranění sezení, nebo zadat 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. Přírůstkové statistiky SQL Server 2014

  2. Pochopení normalizace a duplikátů – Myslím, že ne – Přidání ID interpretů a titulů

  3. Seskupit podle data pouze ve sloupci Datetime

  4. Vyberte databázi MySQL v systému Linux pomocí příkazového řádku