이 나를 위해 매우 복잡한 상황을 실행 한 누군가가 나를 도울 수 있는지 궁금 해서요 :사용 지연이
Record_no Type Solde SQLCalculatedPmu DesiredValues
------------------------------------------------------------------------
2570088 Insertion 60 133 133
2636476 Insertion 67 119,104 119,104
2636477 Insertion 68 117,352 117,352
2958292 Insertion 74 107,837 107,837
3148350 Radiation 73 107,837 107,83 <---
3282189 Insertion 80 98,401 98,395
3646066 Insertion 160 49,201 49,198
3783510 Insertion 176 44,728 44,725
3783511 Insertion 177 44,475 44,472
4183663 Insertion 188 41,873 41,87
4183664 Insertion 189 41,651 41,648
4183665 Radiation 188 41,651 41,64 <---
4183666 Insertion 195 40,156 40,145
4183667 Insertion 275 28,474 28,466
4183668 Insertion 291 26,908 26,901
4183669 Insertion 292 26,816 26,809
4183670 Insertion 303 25,842 25,836
4183671 Insertion 304 25,757 25,751
: 여기
내 테이블 내 테이블에서
이전 값을 기준으로 SQLCalculatedPmu
열 또는 desiredValue
열 계산의 모든 값.
당신이 볼 수 있듯이
, 나는 3 개 소수에 라운드를 기반으로SQLcalculatedPMU
열을 계산했다. 경우에 따라 각 라인의 방사선에서 클라이언트는 3 대신 원하는 값 열에 표시된 2 개의 소수점을 기준으로 다음 계산을 시작하려고합니다. 다음 값이 다시 계산됩니다. 예를 들어, 5 행의 값이 2 자리 소수에 오면 6 행이 변경됩니다. 내가 처리 할 수있는이있을 경우 어디에서 하나 개의 방사선하지만 내 경우에는 내가 방사선을 많이 가지고이 경우 그들은 두 소수의 계산에 따라 모든 변경됩니다.
은 요약하면, 다음 단계는 다음과 같습니다
1 - round the value of the preceding row of a raditaiton and put it in the radiation row.
2 - calculate all next insertion rows.
3 - when we reach another radiation we redo steps 1 and 2 and so on
내가 오라클 DB를 사용하고 내가 절차, 삽입, 업데이트, 선택을 할 수 있도록 내가 주인을 해요. 그러나 절차 나 루프에 익숙하지 않습니다.
(price * number)+(cumulative (price*number) of the preceeding lines)
나는이 같은 시도 :
update PMUTemp
set SQLCalculatedPmu =
case when Type = 'Insertion' then
(number*price)+lag(SQLCalculatedPmu ,1) over (partition by investor
order by Record_no)/
(number+lag(solde,1) over (partition by investor order by Record_no))
else
TRUNC(lag(SQLCalculatedPmu,1) over partition by invetor order by Record_no))
end;
을
내용
,이 SQLCalculatedPmu에 대한 공식은 두 개의 추가 culmns 가격과 번호를 사용하고이 각 투자자 cumulativelly 모든 라인을 계산이다
:는하지만 나에게이 오류 (내가 자체가 SQL 문 중에 수정 된 preceiding 라인에서 찾고 있어요 있기 때문에 생각)했다 일을 할 것입니다 방사선의 수 많은 시간으로 호출되는 프로 시저를 작성하지만 절차
어떤 도움 감사합니다 정말 좋은 아니에요 경우 궁금 해서요 43,210
,
그냥 내 필요 간단하게하기 위해, 내가 원하는 모두는 SQLCalculatedPmu 열에서 시작 DesiredValues 열을하는 것입니다. 테이블의 방사선 행 SQL 업데이트를이 더 빠르고 안정적으로 할 것 - 단계
1 - on a radiation the value become = trunc(preceding value,2)
2 - calculate all next insertion rows this way : (price * number)+(cumulative (price*number) of the preceeding lines). As the radiation value have changed then I need to recalculate next lines based on it
3 - when we reach another radiation we redo steps 1 and 2 and so on
친절한 관련
먼저
뭔가처럼 .. 당신이 TRUNC, 당신은 라운드를하지 않습니다 (107,837'는'107,84' 반올림 될 것'하지'107,83'). 그렇다면 여기에서 직면 한 문제가 무엇인지 이해하지 못합니다 ... – Emmanuel
@Nicholas Krasnov 예를 들어, 107,837 대신에 107,83으로 첫 방사선을 강제합니다. 이 경우이 새로운 숫자이므로 다음 줄은 그 값에 따라 계산되어야하므로 다음 줄에는 98,401 대신 98,395가 표시됩니다.문제는이 방사선도 다음 값에 영향을 미치지 만 다음 방사선도 다음 값에 영향을 미친다는 것입니다. 그래서 나는 첫 번째 복사의 새로운 값과 두 번째 복사의 변화에 대한 값을 기반으로 값을 고정하는 루프를 만들어야합니다. – user2583029
그런데 방사선 값은 이전 값의 2 ~ 10 자릿수에 불과합니다. 따라서 선행 값이 변경되면 방사선 값도 변하고 방사선 값은 모든 다음 값에 영향을 미칩니다. – user2583029