206 votes

La façon de groupe de fois par heure ou par 10 minutes

comme lorsque je ne

SELECT [Date]
  FROM [FRIIB].[dbo].[ArchiveAnalog]
  GROUP BY [Date]

comment puis-je spécifier le groupe de la période ?

MS SQL 2008

2ème Edition

Je suis en train

SELECT MIN([Date]) AS RecT, AVG(Value)
  FROM [FRIIB].[dbo].[ArchiveAnalog]
  GROUP BY (DATEPART(MINUTE, [Date]) / 10)
  ORDER BY RecT

changé %10 / 10. est-il possible de faire de Date de sortie, sans millisecondes ?

250voto

Heather Points 8785

enfin, fait avec

GROUP BY
DATEPART(YEAR, DT.[Date]),
DATEPART(MONTH, DT.[Date]),
DATEPART(DAY, DT.[Date]),
DATEPART(HOUR, DT.[Date]),
(DATEPART(MINUTE, DT.[Date]) / 10)

21voto

tzup Points 2215

En T-SQL, vous pouvez:

SELECT [Date]
  FROM [FRIIB].[dbo].[ArchiveAnalog]
  GROUP BY [Date], DATEPART(hh, [Date])

ou

par minute d'utilisation DATEPART(mi, [Date])

ou

par 10 minutes d'utilisation DATEPART(mi, [Date]) % 10 (comme Timothy suggéré)

13voto

Timothy Khouri Points 14640

Pour un intervalle de 10 minutes, vous

GROUP BY (DATEPART(MINUTE, [Date]) % 10)

Comme cela a déjà été mentionné par tzup et Pieter888... de faire une heure d'intervalle, juste

GROUP BY DATEPART(HOUR, [Date])

8voto

Frank Schmitt Points 13554

Doit être quelque chose comme

select timeslot, count(*)  
from 
    (
    select datepart('hh', date) timeslot
    FROM [FRIIB].[dbo].[ArchiveAnalog]  
    ) 
group by timeslot

(Pas sûr à 100% sur la syntaxe - je suis plus un Oracle genre de gars)

Dans Oracle:

SELECT timeslot, COUNT(*) 
FROM
(  
    SELECT to_char(l_time, 'YYYY-MM-DD hh24') timeslot 
    FROM
    (
        SELECT l_time FROM mytab  
    )  
) GROUP BY timeslot 

1voto

user3193141 Points 1

Ma solution est d'utiliser une fonction pour créer une table avec les intervalles de date et ensuite rejoindre ce tableau pour les données que je veux de groupe à l'aide de l'intervalle de dates dans le tableau. L'intervalle de dates peuvent être facilement sélectionnés lors de la présentation des données.

CREATE FUNCTION [dbo].[fn_MinuteIntervals]
    (
      @startDate SMALLDATETIME ,
      @endDate SMALLDATETIME ,
      @interval INT = 1
    )
RETURNS @returnDates TABLE
    (
      [date] SMALLDATETIME PRIMARY KEY NOT NULL
    )
AS
    BEGIN
        DECLARE @counter SMALLDATETIME
        SET @counter = @startDate
        WHILE @counter <= @endDate
            BEGIN
                INSERT INTO @returnDates VALUES ( @counter )
                SET @counter = DATEADD(n, @interval, @counter)
            END
        RETURN
    END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X