설모의 기록
일주일 간격으로 데이터 개수 출력하기 본문
일정 기간마다 데이터의 개수를 뽑아오고 싶을 때 (예를 들어 1주일마다 회원가입 수) 쓰는 쿼리이다.
처음에 생각한 방법은
count(case when convert(varchar(10), regDate, 120) between convert(varchar(10),DATEADD(d, -7, getDate()), 120) and convert(varchar(10), getDate(), 120) then 1 end)
를 사용했다. 그런데 일주일 씩 count(*) 를 여러개 select 했더니 속도가 느려지는 것을 느꼈다. 그래서 검색하던 도중 새로운 쿼리를 알게 되었다.
SELECT DATEADD(week, DATEDIFF(week, 0, date컬럼명), 0) AS weekStart
, count(*) as cnt
FROM 테이블이름
GROUP BY DATEADD(week, DATEDIFF(week, 0, date컬럼명), 0)
위의 방식대로 쿼리를 짜게 되면 weekStart(월요일 날짜) 와 cnt(그 주의 데이터 개수) 를 구할 수 있다.
week 뿐만 아니라 day, month, year 로도 사용할 수 있다.
'데이터베이스' 카테고리의 다른 글
[SQL 스터디] SQL 첫걸음 스터디 - 2 (0) | 2018.12.05 |
---|---|
[SQL 스터디] SQL 첫걸음 스터디 - 1 (1) | 2018.10.19 |
mongoDB 사용법 (2) | 2017.10.09 |
MongoDB 설치법 (mac 기준) (0) | 2017.10.09 |
Comments