MySQL & MariaDB

일일통계 테이블로 일간/주간/월간/연간 통계값 가져오기

deerfrd 2023. 12. 7. 09:51
반응형

테이블/컬럼 구조

  1. tb_table : 일자별로 통계값을 저장하는 테이블
  2. standard_date : String형으로 yyyymmdd형식 (예: 20231207)
  3. cnt_value : 통계값 (예: 일일 총 접속자 수)

 

셀렉트 방식

  • 주간 : 현재일자를 기준으로, 월~일요일 데이터를 가져옴
  • 월간 : 현재일자를 기준으로, 해당월의 1일~다음월의 1일(이하) 데이터를 가져옴
  • 연간 : 현재일자를 기준으로, 해당연도의 1일~다음연도의 1일(이하) 데이터를 가져옴

 

SELECT
		'일간'						AS KIND,
		SUM(cnt_value)				  AS SUM_CNT
		FROM
		tb_table
		WHERE standard_date  = CURDATE()
		UNION ALL
		-- 주간통계 (현재일자 기준, 월~일 데이터)
		SELECT
		'주간'						 AS KIND,
		SUM(cnt_value)				   AS SUM_CNT
		FROM
		tb_table
		WHERE standard_date >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY
		AND standard_date <= CURDATE() + INTERVAL (6 - WEEKDAY(CURDATE())) DAY
		UNION ALL
		-- 월간통계
		SELECT
		'월간'						 AS KIND,
		SUM(cnt_value)				   AS SUM_CNT
		FROM
		tb_table
		WHERE standard_date >= DATE_FORMAT(CURDATE(), '%Y%m01')  -- 현재 월의 1일
		AND standard_date < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y%m01')
		UNION ALL
		-- 연간통계
		SELECT
		'연간'						 AS KIND,
		SUM(cnt_value)				   AS SUM_CNT
		FROM
		tb_table
		WHERE standard_date >= DATE_FORMAT(CURDATE(), '%Y0101')  -- 현재 연도의 1월 1일
		AND standard_date < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR), '%Y0101')

 

반응형