sqlserver/mysql 날짜,시간,분 별 통계 연속 시간 대 데이터[추천]

하나,앞 에 쓰 면
최근 회 사 는 날짜 에 따라 시간 에 따라 데 이 터 를 보면 시간 대의 데이터 피크 수 치 를 직관 적 으로 볼 수 있다.수 요 를 받 자마자 미 친 바 이 두 검색 을 시 작 했 지만 검색 한 자 료 는 잘 모 르 기 때문에 그 중의 중요 한 정 보 를 스스로 정리 하고 발굴 해 야 한다.이제 제 가 나 눠 드릴 게 요.마음 에 드 셨 으 면 좋 겠 어 요.
sqlserver 에 대해 몇 가지 말씀 드 려 야 할 것 이 있 습 니 다.(모 르 는 자체 바 이 두)
•master..spt_values 가 뭐 예요?무엇 에 쓸 수 있 습 니까?
•어떻게 연속 적 인 시간 대(년,월,일,시간,분)를 만 듭 니까?
2,master..sptvalues 가 뭐 예요?뭘 로 쓸 수 있 을까요?
상대 적 으로 통용 되 는 숫자 를 추출 하 는 표 의 주요 역할 은 연속 숫자 를 취 하 는 것 이지 만 2047 까지 만 얻 을 수 있다 는 결함 이 있다.다음 문장 을 실행 하면 무슨 뜻 인지 알 수 있다.select number from master..spt_values where type='p'3.어떻게 연속 적 인 시간 대(년,월,일,시간,분)를 만 듭 니까?
실제 운용 에서 현 재 는 주로 연속 적 인 시간 대가 생 긴 다.나 는 자주 사용 하 는 조작 을 준 비 했 는데,그 아래 의 문 구 는 각각 보 여 주 었 다.

--        
SELECT 
 substring(CONVERT(NVARCHAR(10), DateAdd(YEAR, number, '2016-01-01'),120),1,4) AS GroupDay,type 
FROM 
 master..spt_values 
WHERE type = 'p' AND number <= DateDiff(YEAR, '2016-01-01', '2019-01-01') 
--        
SELECT 
 substring(CONVERT(NVARCHAR(10), DateAdd(MONTH, number, '2019-01-01'),120),1,7) AS GroupDay,type 
FROM 
 master..spt_values 
WHERE type = 'p' AND number <= DateDiff(MONTH, '2018-01-01', '2019-01-01') 
--        
SELECT 
 CONVERT(NVARCHAR(10), DateAdd(day, number, '2019-01-01'),120) AS GroupDay,type 
FROM 
 master..spt_values 
WHERE type = 'p' AND number <= DateDiff(day, '2019-01-01', '2019-01-18') 
--         
SELECT 
 substring(convert(char(32),DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),120),1,16) AS GroupDay,type 
FROM
 master..spt_values 
WHERE type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),CONCAT('2019-01-18',' ', '23:00'))>=0
--          YY 
......
4.업무 장면 과 결합
연속 적 인 데이터 가 있 으 면 당연히 시간 위주 로 왼쪽 연결 을 한다.통계 수 치 를 찾 을 수 있 습 니 다.
다음은 제 가 사용 한 두 가지 통계 사례(저장 과정 으로 이 루어 졌 기 때문에@기호 가 있 는 것 은 변수)를 말씀 드 리 겠 습 니 다.여러분 께 보 여 드 리 겠 습 니 다.알 아 볼 수 있 는 지 없 는 지 는 당신 의 능력 에 달 려 있 습 니 다.

--         
select a.GroupDay, ISNULL(b.e, 0) 'feeCount' from (
   SELECT 
    CONVERT(NVARCHAR(10), DateAdd(day, number, @paySdate),120) AS GroupDay,type 
   FROM 
    master..spt_values 
   WHERE 
    type = 'p' AND number <= DateDiff(day, @paySdate, @payEdate) 
   ) a 
   left join 
    (select 
     convert(char(32),create_time,23) as d, count(*) as e 
    from 
     trade_log where create_time >= @paySdate and create_time<=@payEdate
    group by convert(char(32),create_time,23)) b on b.d=a.GroupDay
--          
select a.GroupDay, ISNULL(b.e,0) 'feeCount' from (
    SELECT 
     substring(convert(char(32),DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),120),1,16) AS GroupDay,type 
    FROM 
     master..spt_values 
    WHERE 
     type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),CONCAT(@payEdate,' ', @payETime))>=0 
    ) a 
    left join (
    select 
     convert(char(32),create_time,23) as d, datepart(hh,create_time) as h,
     substring(convert(char(32),DATEADD(HH,datepart(hh,create_time),convert(char(32),create_time,23)),120),1,16) as st,
     count(*) as e 
    from 
     trade_log 
    where create_time >= @paySdate and create_time<=@payEdate 
     and convert(char(8),create_time,108)>=@paySTime and convert(char(8),create_time,108)<=@payETime 
    group by convert(char(32),create_time,23),datepart(hh,create_time)) b 
    on b.st=a.GroupDay order by GroupDay
5.총화 및 전망
습득 한 지식 포인트:
•저장 과정의 문법 과 작성 과정 을 익 혔 습 니 다.
•마스터 를 배 웠 습 니 다.sptvalues 가 뭐 예요?그리고 사용 할 수 있 는 장면?
•시간 에 따라 통 계 를 하 는 것,예 를 들 어 날짜,시간 에 따라 통 계 를 하 는 실현 방법.
전망:
•한계 성:이런 방식 은 현재 sqlserver 만 을 대상 으로 하지만 현재 대부분 my sql 입 니 다.
ps:MySQL 날짜 별,주 별,월 별,시간 대별 통계
자신 이 MySQL 을 만 든 적 이 있 습 니 다.날짜,주,월,시간 대별 로 통 계 를 했 지만 그다지 만 족 스 럽 지 않 았 습 니 다.나중에 이 대 신의 블 로 그 를 찾 아 옮 겨 보 세 요.이 블 로 거들 의 공유 에 감 사 드 립 니 다.
지식 포인트:DATE_FORMAT사용 예시

select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days;
 select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks;
 select DATE_FORMAT(create_time,'%Y%m') months,count(caseid) count from tc_case group by months;
DATE_FORMAT(date,format)format 문자열 에 따라 date 값 을 포맷 합 니 다.다음 수식 자 는 format 문자열 에 사용 할 수 있 습 니 다.
•%M 월 이름(1 월...12 월)
•%W 성
기명(Sunday...Saturday)
•%D 영어 접두사 가 있 는 달의 날짜(1st,2nd,3rd 등)
•%Y 년,숫자,4 자리
•%y 년,숫자,2 위
•%a 줄 임 말 요일 이름(Sun...Sat)
•%d 월 의 일수,숫자(00...31)
•%e 월 의 일수,숫자(0...31)
•%m 월,숫자(01...12)
•%c 월,숫자(1...12)
•%b 줄 임 말 월 이름(Jan...Dec)
•%j 1 년 중 일수(001...366)
•%H 시간(00...23)
•%k 시간(0...23)
•%h 시간(01...12)
•%I 시간(01...12)
•%l 시간(1...12)
•%i 분,숫자(00...59)
•%r 시간,12 시간(hh:mm:ss[AP]M)
•%T 시간,24 시간(hh:mm:ss)
•%S 초(00...59)
•%s 초(00...59)
•%p AM 또는 PM
•%w 일주일 중 일수(0=Sunday...6=Saturday)
일요일
월요일
•%%한 글자'%'
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 sqlserver/mysql 은 날짜,시간,분 에 따라 연속 시간 대 데 이 터 를 통계 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기