product | price | valid from |
A | 10 | 20100401 |
B | 20 | 20100501 |
C | 50 | 20100401 |
C | 40 | 20100701 |
C | 30 | 20100901 |
D | 50 | 20100401 |
D | 40 | 20100701 |
D | 30 | 20101001 |
위 처럼 데이터가 있을 경우 오늘(2010-09-09)을 기준으로 노란 데이터만 뽑아 오고 싶습니다.
C는 데이터가 세개 있지만 날짜가 2010-09-01 데이터가 유효하구요.
D는 2010-10-01 데이터는 아직 도래하지 않았기 때문에 2010-07-01 데이터가 유효합니다.
LOOP를 어떻게 돌리면 될 것도 같은데 머리가 뽀개지네요.
댓글 3
-
맑은하늘
2010.09.09 22:23
-
야생이
2010.09.09 22:48
앗 맑은 하늘님이 어느새 답변을 ㅋㅋㅋ
만약 금일 날자 이후의 데이터는 전혀 필요없다고 하시면
loop 돌리기전에
delete itab valid_from > sy-datum.
하시면 처리가 더 빨라지겠네요^^
그리고 loop 를 안돌리고 하실려면
아래처럼 해도 되네요
참조하세요^^
sort itab by product ASCENDING valid_from DESCENDING .
delete itab where valid_from > sy-datum.
DELETE ADJACENT DUPLICATES FROM itab COMPARING product.
**결과
A 10 20100401
B 20 20100501
C 50 20100401
C 40 20100701
C 30 20100901
D 50 20100401
D 40 20100701
D 30 20101001
==>
B 20 20100501
C 30 20100901
D 40 20100701
-
모포
2010.09.10 14:47
감사합니다.. 두분 덕분에 해결했어요~~
data lv_index type i.
data ls_itab like line of itab[].
sort itab by product valid_from.
loop at itab.
lv_index = sy-tabix.
at end of product.
if itab-valid_from <= sy-datum.
"" 채택
else.
do.
subtract 1 from lv_index.
if lv_index < 1. exit. endif.
read table itab into ls_itab index lv_index.
if sy-subrc is not initial. exit. endif.
if itab-product <> ls_itab-product.
"" 대상없음 탈락.
exit.
elseif itab-valid_from <= sy-datum.
"" 채택
endif.
enddo.
endif.
endat.
endloop.
대충이리 되지 않을까요?