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 9328 게시물 읽기
No. 9328
바로 위 데이터를 가져오는 쿼리 문의드립니다.
작성자
최지연(최지연)
작성일
2013-08-16 19:34
조회수
9,571

안녕하세요

급하다 보니 자주 문의드립니다. 먼저 감사하다는 말씀드립니다.

현재 데이터는 아래와 같습니다.

row cum
1  
2 100
3  
4 200
5  
6  
7 150
8  

쿼리를 날렸을때

row cum cum2
1    
2 100 100
3   100
4 200 200
5   200
6   200
7 150 150
8   150

위와 같이 cum2 열을 나오게 하려면 어떻게 해야 될지요?

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

 두번째 테이블 내용으로 보이는 뷰를 만들 것이 아니라, 

cum 칼럼에 null 일 경우, 이전 값을 입력하는 방식으로 응용 프로그램을 바꾸는 것이, 

이게 안되면, insert trigger를 하나 지정하는 것이 편할 것 같네요.

 

김상기(ioseph)님이 2013-08-19 09:44에 작성한 댓글입니다.

정렬에 관계없이 항상 row 에 대해 일정한 값을 가진다면 아무래도 데이타 입력시 값을 셋팅하는게 편할테고요

그렇지 않고 정렬에 따라 값이 변하게 된다면 아래와 같이 집계함수를 이용하면 되겠네요.

 

먼저 집계함수에 사용할 함수를 하나 만들고

CREATE OR REPLACE FUNCTION _cadd (integer, integer) RETURNS integer AS

$$

SELECT CASE WHEN $2 IS NULL THEN $1 ELSE $2 END;

$$ LANGUAGE SQL;

 

그리고 집계함수를 만들고

CREATE AGGREGATE csum (integer) (

SFUNC = _cadd,

STYPE = integer

);

 

그리고 이렇게 쿼리를 날리면 되겠지요

SELECT row, cum, csum(cum) OVER (ORDER BY row) AS cum2 FROM tab;

 

아, 들여쓰기가 안 되는가 봅니다.

 

tyro님이 2013-08-20 15:53에 작성한 댓글입니다.
이 댓글은 2013-08-20 16:01에 마지막으로 수정되었습니다. Edit

아래와 같이 합 해보세요

원하는 답이 될런지 모르겠네요

WITH T AS (
SELECT '1' AS seq, NULL VAL UNION ALL
SELECT '2', '30' UNION ALL
SELECT '3', NULL UNION ALL
SELECT '4', '20' UNION ALL
SELECT '5', NULL UNION ALL
SELECT '6', '40' UNION ALL
SELECT '7', NULL UNION ALL
SELECT '8', '30' UNION ALL
SELECT '9', NULL
)

SELECT seq, val, VAL2
  FROM (SELECT seq, val,
              COALESCE(LAST_VALUE(val)
               OVER(ORDER BY seq
               ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
               ),VAL) VAL2
          FROM t
        ) a
order by 1
;
 

우제은님이 2013-09-05 15:26에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
93318.2 버젼과 그이상버젼(8.4 대, 9.대 ) 에서의 속도차이??? (미해결-로그올립니다 - 상기님 한번 봐주세요 ^^) [6]
롱다리
2013-08-28
9496
9330쿼리 문의
희동이
2013-08-21
9374
9329쿼리만들기 좀 부탁드립니다. [1]
심상호
2013-08-21
9657
9328바로 위 데이터를 가져오는 쿼리 문의드립니다. [3]
최지연
2013-08-16
9571
9327PostgreSQL 컬럼 길이 변경 문의입니다.. [2]
김제문
2013-08-16
11971
9326아래 자료를 어떻게 추출해야 하는지 도움 부탁드립니다. [2]
최지연
2013-08-12
9181
9325pgsql에서 rownum 후 group by order by 처리는? [1]
pgadmin
2013-08-07
10298
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다