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
운영게시판
최근게시물
PostgreSQL Q&A 7704 게시물 읽기
No. 7704
쿼리문좀 부탁드립니다.
작성자
초보
작성일
2009-04-28 20:51
조회수
7,239

안녕하세요!

아래와 같은 데이타가 있을경우 쿼리문을 어떻게 해야될지 궁금합니다.

일자    거래처  번호  품목      단가
01.01     1      1     A        100
01.02     2      1     A        100
01.03     1      1     A        110
01.04     3      1     A        100
01.05     3      1     A        105
01.06     1      1     A        120
01.06     1      2     A        150   --->2번의 마지막단가
01.06     4      3     A        100

1       A        150
2       A        100
3       A        105
4       A        100

위와 같이 거래처/품목별로 제일 마지막 단가를 뷰테이블로
가지고 있고 싶습니다. 쿼리문을 어떻게 만들어야될지
고수님의 조언을 부탁드립니다.

그럼수고하세요,

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

그 경우는 집계함수로 풀기 힘들거든요.

저런 경우, 현업의 요구 사항이 어떤식이냐에 따라서 몇가지 풀어내는 방법이 있는데,

만일 '특정 상품의 특정 거래처 마지막 단가' 일 경우라면, 그냥 저 자료를 가지고 인라인뷰로 풀어내겠지만,


select a.거래처, a.품목, a.단가 from 테이블 as a, (select 거래처,max(번호) as 번호 from 테이블 group by 거래처) as b where a.거래처 = b.거래처 and a.번호 = b.번호;



이 쿼리를

특정 상품 모든 거래처 마지막 단가 목록이나,

모든 상품 모든 거래처 마지막 단가 목록을 구할 때 사용하겠다면,

심각하게 고민해봐야합니다.

(거래 내역이 쌓이고, 거래처가 많아지고, 품목이 많아지면, 쓸 수 없는 쿼리거든요)


개인적으로는 당연히 자료구조를 확장하기를 권해드립니다.


김상기(ioseph)님이 2009-04-29 10:24에 작성한 댓글입니다.

아직 해결방법은 생각해봐야 겠지만 정말감사드립니다.

초보님이 2009-04-29 15:35에 작성한 댓글입니다. Edit

만일 8.4 라면 window (분석쿼리) 를 활용하면 손쉽게 구해볼 수 있을 거 같습니다.

아직 베타라..좀 거시기 합니다만...


select 거래처, 품목, 단가

from  (select 거래처, 품목, 단가, 

                    rank() over (partition by 거래처 order by 일자 desc, 번호 desc) 

         from 테이블

        ) as T

where rank = 1;


대충 이런식이면 되지 쉽네요


이전 버젼이라도 어떻게든 해결해 볼수는 있겠습니다만

자료가 많아지면 효율이 안 좋아질거라 예상됩니다.

tyro님이 2009-04-30 02:31에 작성한 댓글입니다.
이 댓글은 2009-04-30 02:37에 마지막으로 수정되었습니다. Edit

위에 8.4 버전에 rank on을 보고 8.3 버전 부터 인지 전 버전 부터인지 지원하는 쿼리 중에

distinct on이란 쿼리가 있습니다.

select distinct on(data.id) data.id, data.product, data.price from (select * from tax order by id, date desc)data; 

이런식으로 쓰면 되는 형태입니다. 제가 임시로 넣어서 해봤는데영 결과는 원하는 되로 나옵니다.

하지만 메모리 2기가에서 제가 많은 자료를 이쿼리 형태로 해서 약 3만건 정도를 뽑아되는 일을 테스트 

해봤는데여 shared_buffers 사이즈가 작아서 그런지 아님 오류인지 제대로 

sorting 이 안되는 문제가 있더라고영 그래서 간단한 자료는 위에분들 형태나 distinct on형태로 

뽑아도 괜찮을거 같은데여 대량 자료에서는 distinct on은 제대로 세팅을 해서 이용하세용

허접하지만  그냥 distinct on기능 광고 ㅋㅋ 

좋은 하루 보내세용

참고로 주소 올립니다.

http://www.postgresql.org/docs/8.3/interactive/queries-select-lists.html

열혈지누(jinukey)님이 2009-04-30 10:00에 작성한 댓글입니다.

여러 고수님들의 답변으로 

정말 많은 도움이 되었습니다.

감사드립니다.

초보님이 2009-05-01 11:06에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7707could not open relation [1]
전상도
2009-04-30
6578
7706postgres8.3 windows 64비트 지원하나요? [2]
인스톨
2009-04-29
6407
7705게시판에서 최신글 5개정도만 목록에 표시하려면 어떻게 해야되나요? [2]
최준혁
2009-04-29
8459
7704쿼리문좀 부탁드립니다. [5]
초보
2009-04-28
7239
7703trigger 생성 시 MS-SQL의 with encryption 옵션처럼 암호화 할수 있는 방법이 있나요 [1]
포세이크
2009-04-28
6763
7702pgkts 가지고 놀기 [2]
김상기
2009-04-28
6455
7701Win PostgreSQL과 jdbc(jsp)설정 해보신분 계시나요. [2]
이기자
2009-04-24
7795
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다