database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6704 게시물 읽기
No. 6704
안녕하세요
작성자
초보입니다.(fightinggood)
작성일
2013-08-06 11:37
조회수
7,553

 안녕하세요..

하단의 4686 번 게시물의 질문으로 우욱님께서 이런 방법으로 하면될것 같다고 알려주신 쿼리입니다.

알려주신 쿼리로 현재 사용중입니다.

DECLARE @lastmonth DATETIME

;
SELECT @lastmonth = MAX( 일자 )
FROM tt
WHERE 제품코드 = '000001'
;
SELECT AVG( 금액 )
FROM tt
WHERE 제품코드 = '000001'
AND DATEADD( MONTH, DATEDIFF(MONTH, 0, @lastmonth ), 0 ) <= 일자
AND 일자 < DATEADD( MONTH, DATEDIFF(MONTH, 0, @lastmonth ) + 1, 0 ) 

한가지더 궁금해서 여쭤 볼려고 합니다.

위 쿼리는 한가지 제품에 대한 가장최근의 한달 평균값을 구하는 쿼리입니다.

예로 제품의

일자                 제품코드                     가격

2013-02-11     000001                      500

201302-15      000001                      700

이런데이터가 있다면 제품의 평균가인 600 원이 나옵니다.

이번에는 해당테이블의 전체 제품코드의 가장최근 한달 평균값을 구할려고 합니다.

제품코드만 넣지 않으면 될줄알았는데 아니더라구요

가장최근 한달은 현재인 8월달이 될수도 있고 2월달이 될수도 있습니다.

감사합니다.

수고하세요~!

이 글에 대한 댓글이 총 6건 있습니다.

  DECLARE @lastmonth DATETIME

;
SELECT @lastmonth = MAX( 일자 )
FROM tt
;
SELECT AVG( 금액 )
FROM tt
AND DATEADD( MONTH, DATEDIFF(MONTH, 0, @lastmonth ), 0 ) <= 일자
AND 일자 < DATEADD( MONTH, DATEDIFF(MONTH, 0, @lastmonth ) + 1, 0 ) 
;
 
와 같이 하시면 될텐데요...
우욱님이 2013-08-06 12:32에 작성한 댓글입니다. Edit

 우욱님

그대로 돌려보니

일자가 20130801 서 부터 20130901 까지만 걸리더라구요

가장최근일자가 20130801 ~ 20130901 사이가 아니면

다 0으로 나옵니다.

가장최근 월이 201302 월도 있고 3월 5월 다양하게 있습니다.

 

초보입니다.님이 2013-08-06 13:24에 작성한 댓글입니다. Edit

그럼 각각의 제품별 최근 한달 평균을 구하는 건가요?

 

제품코드 | 평균
1 | 600
2 | 1000
 

식으로?

우욱님이 2013-08-06 13:31에 작성한 댓글입니다. Edit

 네

각각의 제품의 등록된 가장 최근의 한달 평균값을 구해야 합니다.

 

초보입니다님이 2013-08-06 13:35에 작성한 댓글입니다. Edit

SELECT tt.제품코드, AVG( tt.금액 ) AS 평균, MIN( curMon ) AS 평균구한월

FROM
tt 
INNER JOIN
(
SELECT 제품코드
, DATEADD( MONTH, DATEDIFF( MONTH, 0, MAX( 일자 ) ), 0 ) AS curMon
, DATEADD( MONTH, DATEDIFF( MONTH, 0, MAX( 일자 ) )+1, 0 ) AS nxtMon
FROM tt
GROUP BY 제품코드
) AS rcntPerPrd
ON rcntPerPrd.제품코드 = tt.제품코드 
AND rcntPerPrd.curMon <= tt.일자 
AND tt.일자 < rcntPerPrd.nxtMon
GROUP BY tt.제품코드
;
우욱님이 2013-08-06 14:11에 작성한 댓글입니다. Edit

 우욱님 정말감사합니다..

수고하세요~!

초보입니다.(fightinggood)님이 2013-08-07 09:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6707초데이터에서 분당 평균 구하기 [1]
윤창기
2013-08-08
7458
6706DB 복사 [2]
어서와
2013-08-08
7049
6705사용중인 프로그램 조인할수 있나요? [4]
김우성
2013-08-07
6967
6704안녕하세요 [6]
초보입니다.
2013-08-06
7553
6703같은테이블 조회 및 계산 방법. [2]
구글어스
2013-07-25
7209
6702쿼리문 질문입니다. [7]
김민식
2013-07-24
9058
6701다음 oracle sql 을 ms-sql 에서는 어떻게 하나여 [1]
최종길
2013-07-24
6905
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.058초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다