프로그래밍/DB

[DB] MSSQL 년별,분기별,월별,주별,일별 통계쿼리(DATEPART사용)

ss-pro 2020. 10. 16. 23:02
반응형

데이터베이스에서 자료를 뽑아야될경우 년단위,월단위,일단위등으로 자료를 뽑아야될경우가 있습니다. 관련부분에 대해서 알아보겠습니다. 먼저 테스트데이트베이스는 마이크로소프트에서 다운받아서 테스트 해보겠습니다. AdventureWorksL2019데이터베이스를 다운받아서 테스트 해보겠습니다. 

다운로드 경로 : docs.microsoft.com/ko-kr/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms

날짜별형식변환은 이전글쓰기내용중에서 cast,conver 부분을 참고하시면됩니다. 다음링크에서 참고하시기 바랍니다. 링크정보 : sosopro.tistory.com/48

SalesLT.Address테이블의 대한 데이터로 통계쿼리를 살펴보도록하겠습니다. 수정한일자에 대한 통계를 알아볼예정이며 일자별 CountryRegion에 개수에 대해 살펴보도록 하겠습니다. 


1. 년단위 통계
년별로 도시주소가 수정된 개수에 대한 통계값입니다. convert함수를 이용하여 년단위로 출력하게합니다. 

1
2
3
4
5
6
 /****** Script for SelectTopNRows command from SSMS  ******/
SELECT DATEPART(YYYY,ModifiedDate) date, CountryRegion,count(*) cnt 
FROM [AdventureWorksLT2019].[SalesLT].[Address]
group by  DATEPART(YYYY,ModifiedDate),CountryRegion
order by date 

쿼리결과입니다. 

2. 분기별 통계
분기별 통계시에는 quarter를 사용하면 분기별(1~4)로 구분되어서 출력이 가능합니다.

1
2
3
4
5
/****** Script for SelectTopNRows command from SSMS  ******/
SELECT DATEPART(quarter,ModifiedDate) date, CountryRegion,count(*) cnt 
FROM [AdventureWorksLT2019].[SalesLT].[Address]
group by  DATEPART(quarter,ModifiedDate),CountryRegion
order by date

쿼리결과

3. 월단위 통계
DATEPART부분을 mm으로 하게 실행하면됩니다.

1
2
3
4
5
6
 /****** Script for SelectTopNRows command from SSMS  ******/
SELECT DATEPART(mm,ModifiedDate) date, CountryRegion,count(*) cnt 
FROM [AdventureWorksLT2019].[SalesLT].[Address]
group by  DATEPART(mm,ModifiedDate),CountryRegion
order by date

쿼리결과 

4. 주간별통계
DATEPART부분을 ww으로 하게 실행하면됩니다. 년도별로 구분을 하기위해서 DATEPART(YYYY,ModifiedDate)을 두었고 해당 부분뒤에 DATEPART(ww,ModifiedDate),CountryRegion으로쿼리문을실행해보겠습니다.

1
2
3
4
5
 /****** Script for SelectTopNRows command from SSMS  ******/
SELECT  DATEPART(YYYY,ModifiedDate),DATEPART(ww,ModifiedDate)  , CountryRegion,count(*) cnt 
FROM [AdventureWorksLT2019].[SalesLT].[Address]
group by DATEPART(YYYY,ModifiedDate),  DATEPART(ww,ModifiedDate),CountryRegion
order by  DATEPART(YYYY,ModifiedDate) 

쿼리결과입니다

5. 일단위 통계
일단위 통계입니다. DD를 입력한후 group by를 해주면 일자별 통계가 출력가능합니다. 

1
2
3
4
 /****** Script for SelectTopNRows command from SSMS  ******/
SELECT   DATEPART(DD,ModifiedDate) DAY  , CountryRegion,count(*) cnt 
FROM [AdventureWorksLT2019].[SalesLT].[Address]
group by   DATEPART(DD,ModifiedDate),CountryRegion

쿼리결과입니다. 테스트일자가 1일밖에 없어서 1일에 데이터만 출력됩니다.


5. DATEPART 정보
DATEPART부분의 인수에 해당하는 정보입니다. 적절하게 사용하셔서 통계자료를 만드시기 바랍니다. 


참고,출처 : docs.microsoft.com/ko-kr/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15