[SQL] 어떻게 그룹 시간 시간으로 10 분
SQL어떻게 그룹 시간 시간으로 10 분
내가 할 때와 같은
SELECT [Date]
FROM [FRIIB].[dbo].[ArchiveAnalog]
GROUP BY [Date]
어떻게 그룹 기간을 지정할 수 있습니까?
MS SQL 2008
2 [편집]
노력하고있어
SELECT MIN([Date]) AS RecT, AVG(Value)
FROM [FRIIB].[dbo].[ArchiveAnalog]
GROUP BY (DATEPART(MINUTE, [Date]) / 10)
ORDER BY RecT
변경된 10 % 10 /로는 밀리 일없이 출력 할 수있다?
해결법
-
==============================
1.마지막으로 수행
마지막으로 수행
GROUP BY DATEPART(YEAR, DT.[Date]), DATEPART(MONTH, DT.[Date]), DATEPART(DAY, DT.[Date]), DATEPART(HOUR, DT.[Date]), (DATEPART(MINUTE, DT.[Date]) / 10)
-
==============================
2.나는 슈퍼 파티에 늦게 해요,하지만 이것은 기존의 답변에 표시되지 않습니다
나는 슈퍼 파티에 늦게 해요,하지만 이것은 기존의 답변에 표시되지 않습니다
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', date_column) / 10 * 10, '2000')
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000') AS [date_truncated], COUNT(*) AS [records_in_interval], AVG(aa.[value]) AS [average_value] FROM [friib].[dbo].[archive_analog] AS aa GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000') ORDER BY [date_truncated]
데이터 스팬 세기, ddagger하는 경우; 에 대해 하나의 앵커 날짜를 사용하여 2 ~ 또는 밀리 초 그룹 여전히 오버 플로우가 발생합니다. 즉 일어나는 경우에, 당신은 자신의 날짜의 자정 비닝 비교를 고정하기 위해 각 행을 요청할 수 있습니다 :
당신의 DATEPART가 SECOND 경우 † 232 ≈ 4.29E + 9, 그래서, 당신은 양쪽에 4,300,000,000초를 얻을, 또는 "앵커 ± 136년." 마찬가지로, 232 밀리 초 ≈ 49.7 일이다. 및 ddagger; 경우 실제로 스팬 세기 나 천년 여전히 초 또는 밀리 초 ... 축하에 대한 정확한 데이터를! 무엇이든 당신이하고있는, 그 일을 계속.
-
==============================
3.당신이 할 수있는 T-SQL에서 :
당신이 할 수있는 T-SQL에서 :
SELECT [Date] FROM [FRIIB].[dbo].[ArchiveAnalog] GROUP BY [Date], DATEPART(hh, [Date])
또는
분 사용하여 DATEPART (MI [일자])
또는
10 분 DATEPART (MI [일자]) / 10 (티모 제안처럼) 사용
-
==============================
4.10 분 간격, 당신은 것
10 분 간격, 당신은 것
GROUP BY (DATEPART(MINUTE, [Date]) / 10)
이미 tzup 및 Pieter888 언급 한 것처럼 ... 그냥 시간 간격을 수행하는
GROUP BY DATEPART(HOUR, [Date])
-
==============================
5.같은 뭔가해야
같은 뭔가해야
select timeslot, count(*) from ( select datepart('hh', date) timeslot FROM [FRIIB].[dbo].[ArchiveAnalog] ) group by timeslot
(100 % 확실 구문에 대해 - 좀 더 오라클 종류의 사람이야)
오라클의 경우 :
SELECT timeslot, COUNT(*) FROM ( SELECT to_char(l_time, 'YYYY-MM-DD hh24') timeslot FROM ( SELECT l_time FROM mytab ) ) GROUP BY timeslot
-
==============================
6.원래의 대답은 저자가 꽤 잘 작동했다. 그냥 이런 생각을 확장, 당신은 뭔가를 할 수 있습니다
원래의 대답은 저자가 꽤 잘 작동했다. 그냥 이런 생각을 확장, 당신은 뭔가를 할 수 있습니다
group by datediff(minute, 0, [Date])/10
이는 다음 60 분 등 반나절 인 (720) 말을 더 긴 기간으로 그룹화 할 수 있습니다
-
==============================
7.MySQL 용 :
MySQL 용 :
GROUP BY DATE(`your_date_field`), HOUR(`your_date_field`), FLOOR( MINUTE(`your_date_field`) / 10);
-
==============================
8.
declare @interval tinyint set @interval = 30 select dateadd(minute,(datediff(minute,0,[DateInsert])/@interval)*@interval,0), sum(Value_Transaction) from Transactions group by dateadd(minute,(datediff(minute,0,[DateInsert])/@interval)*@interval,0)
-
==============================
9.내 솔루션은 날짜 간격으로 테이블을 생성하는 함수를 사용하고 난 테이블의 날짜 간격을 사용하여 그룹에 원하는 데이터를이 테이블에 가입하는 것입니다. 데이터를 제시 할 때 날짜 간격이어서, 쉽게 선택 될 수있다.
내 솔루션은 날짜 간격으로 테이블을 생성하는 함수를 사용하고 난 테이블의 날짜 간격을 사용하여 그룹에 원하는 데이터를이 테이블에 가입하는 것입니다. 데이터를 제시 할 때 날짜 간격이어서, 쉽게 선택 될 수있다.
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
-
==============================
10.SQL 서버 2012, 저는 믿습니다하지만 그것은 SQL 서버 2008R2에서 일하는 것, 내가 밀리 초까지 타임 슬라이싱을 얻기 위해 다음과 같은 방법을 사용 :
SQL 서버 2012, 저는 믿습니다하지만 그것은 SQL 서버 2008R2에서 일하는 것, 내가 밀리 초까지 타임 슬라이싱을 얻기 위해 다음과 같은 방법을 사용 :
DATEADD(MILLISECOND, -DATEDIFF(MILLISECOND, CAST(time AS DATE), time) % @msPerSlice, time)
이 방식으로 작동합니다 :
불행하게도, 같은 마이크로와 작은 단위, 그래서 더 큰, 더 정밀한 데이터 세트가 덜 편리한 고정 지점을 사용해야합니다이 오버 플로우입니다.
나는 엄격하게이 문제를 벤치마킹하지 않은 마일리지는 다를 수 있습니다, 그래서 나는, 빅 데이터에 아니지만, 성능의 장비와 데이터 세트에 시도 다른 방법에 비해 눈에 띄게 악화하지 않았다, 임의의 슬라이스에 대한 개발자의 편의에 지불금은 보람 우리를 위해.
-
==============================
11.
select from_unixtime( 600 * ( unix_timestamp( [Date] ) % 600 ) ) AS RecT, avg(Value) from [FRIIB].[dbo].[ArchiveAnalog] group by RecT order by RecT;
당신이 그룹에 (초)의 수에 의해 두 (600)를 교체합니다.
자주이 필요하고 테이블이 변경되지 않으면, 아카이브가 제시 이름으로, 아마 조금 더 빠르게 변환 할 수 있으며 테이블의 unixtime 같은 날짜 (시간)을 저장한다.
-
==============================
12.나는이 하나 쇼에 늦게 나는 알고 있지만, 나는이 사용 - 매우 간단한 방법입니다. 이것은 당신이 어떤 반올림 문제없이 60 개 분이 조각을 얻을 수 있습니다.
나는이 하나 쇼에 늦게 나는 알고 있지만, 나는이 사용 - 매우 간단한 방법입니다. 이것은 당신이 어떤 반올림 문제없이 60 개 분이 조각을 얻을 수 있습니다.
Select CONCAT( Format(endtime,'yyyy-MM-dd_HH:'), LEFT(Format(endtime,'mm'),1), '0' ) as [Time-Slice]
from https://stackoverflow.com/questions/5002661/how-to-group-time-by-hour-or-by-10-minutes by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버에서 삭제 중복 레코드? (0) | 2020.03.22 |
---|---|
[SQL] JSON 형 내부 배열 요소를 쿼리 (0) | 2020.03.22 |
[SQL] 어떻게 테이블의 열 이름을 반환합니까? (0) | 2020.03.22 |
[SQL] 기본 키 필드를 재설정 SQLite는 (0) | 2020.03.22 |
[SQL] PostgreSQL의 그룹화 LIMIT : 각 그룹의 첫 번째 N 행을 보여? (0) | 2020.03.22 |