sql >> Database >  >> RDS >> Sqlserver

GROUP BY gebruiken met FIRST_VALUE en 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

Een oplossing die dicht bij uw huidige ligt. Er zijn twee plaatsen die je verkeerd hebt gedaan.

  1. FIRST_VALUE EN LAST_VALUE zijn Analytische functies , die werken op een raam of partitie, in plaats van op een groep. U kunt de geneste query alleen uitvoeren en het resultaat bekijken.
  2. LAST_VALUE is de laatste waarde van het huidige venster, die niet is opgegeven in uw zoekopdracht, en een standaardvenster is rijen van de eerste rij van de huidige partitie tot huidige rij . U kunt FIRST_VALUE gebruiken met de volgorde voor het verwijderen van zaden of een venster specificeren

    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. Hoe krijg ik een script voor het maken van tabellen in MySQL Workbench?

  2. Een database-e-mailaccount toevoegen aan een profiel (SSMS)

  3. Nightmare java lek... met loop en jdbc

  4. Yii2:Kartik Gridview-som van een kolom in voettekst