728x90

 

https://stepby-yun.tistory.com/193

 

한시간씩 이자율 넣기 while문 사용, update,order by limit

https://stepby-yun.tistory.com/192?category=554522 mysql while 여러시도.. https://stepby-yun.tistory.com/191 mysql procedure 프로시저 생성 및 실행 (구본문자 DELIMITER ) while문 해보려는데.. 나와같은..

stepby-yun.tistory.com

 

max 랑 min써서 잘들어가긴했는데

order했을때 왜 null떴나 싶어서 

다시 해봄

 

 

 

 

 

 

where 조건문을 잘못넣었네

 

 

 

 

 

 

where interest_amount 

빼니까 잘 들어감

 

 

 

 

없네

근데

다른애들은 where 있고 없고 결과값 똑같은데 뭐지

일단 확실한건 

where 조건문

인데 조건문아니고 테이블만 써서 잘못되긴함. 

 

<수정결과>

use test;
truncate sequence;


set @setTime = (select subtime(now(),'00:02:00'));

insert into sequence (name,deposit_date,deposit_amount,interest_amount) values ('이소윤',@setTime,10000000,0);

drop procedure if exists pro;
delimiter //
create procedure pro()
begin
while (select id from sequence order by id desc limit 1) < 10 do


INSERT INTO sequence (name,deposit_date,deposit_amount,interest_amount) 
select 
(select name from sequence order by id desc limit 1),
date_add((select deposit_date from sequence  order by id desc limit 1),INTERVAL 1 hour),
((select deposit_amount from sequence order by id desc limit 1) + (select interest_amount from sequence  order by id desc limit 1)),
(select deposit_amount from sequence where id=1)* 0.04 /12;


end while;
end //
delimiter ;

call pro();




select * from sequence;

 

 

 

 

+

참고로 empty set이 무어냐

쿼리 수행 결과가 없다는 뜻

 

 

https://www.tutorialspoint.com/What-is-the-meaning-of-empty-set-in-MySQL-result-set

테이블 조건만으로는 그 값을 찾을 수 없었나봐...

 

728x90
728x90

 

목표

년 이자 4프로를 12개월로 나눠서

매월 찍히는걸로 하는건데

이름은 그대로 입금날짜는 한달씩 증가로 찍혀야함!!

 

<1차시도>

이자율 계산

 

 

INSERT INTO test.sequence (interest_amount) SELECT (deposit_amount * 0.04 /12)  from test.sequence;

 

 

 

이거 참고함 https://velog.io/@gillog/MySQL-SELECT%EB%90%9C-%EA%B2%B0%EA%B3%BC%EB%A1%9C-INSERT-%ED%95%98%EA%B8%B0

 

 

<2차시도>

한달씩 증가한 날짜 찍기

 

날짜 

https://allmana.tistory.com/7

 

[MySQL] 날짜 더하기 빼기 date_add

[MySQL] 날짜 더하기 빼기 date_add MySQL에서는 날짜를 더하고 뺄때 쓰는 함수가 있다. 바로 date_add 사용법 DATE_ADD(date, INTERVAL 계산수 계산형식) 계산형식이란 월,일,시간 중 어떤걸 더할꺼냐를 선택하

allmana.tistory.com

현재를 기준으로 1달씩 더함

select date_add(now(),INTERVAL 1 MONTH) ;

 

지금을 기준으로 식만들면 다시 재사용하기 힘듦..

 

INSERT INTO test.sequence (deposit_date) select date_add(now(),INTERVAL 1 MONTH);

 

 

 

테이블 내용 삭제하고 다시~

 

TRUNCATE

  • 테이블의 전체 데이터를 삭제
  • 테이블에 외부키(foreign key)가 없다면 DELETE보다 훨씬 빠르게 삭제됨
# 문법
TRUNCATE 테이블명

# 예제
TRUNCATE student;

https://wayhome25.github.io/mysql/2017/03/20/mysql-05-table-insert-delete-modify/

 

MySQL 05. MySQL - Table (insert, update, delete) · 초보몽키의 개발공부로그

 

wayhome25.github.io

<3차시도>

 

위에 한거 동시에 적용해보기

 

 

sequence테이블에 날짜항목, 이자액항목에   지금에 한달추가한 날짜값,  계산한 이자금액 넣는다.

 

INSERT INTO sequence (deposit_date,interest_amountselect date_add(now(),INTERVAL 1 MONTH),10000000* 0.04 /12;

 

 

 

 

숫자로 넣어서 하긴했는데 실제는 이렇게 하면 안될듯 

재사용할 수 있게 변수지정해야되지 않을까

 

 

 

 

 

<4차시도>

 

 

 

 

 

 

INSERT INTO sequence (deposit_date,interest_amount) select date_add((select deposit_date from sequence where id='1'),INTERVAL 1 MONTH),(select deposit_amount from sequence where id='1')* 0.04 /12;

 

 

where id="1"

로 첫번째 행에 있는 값을 사용하게 했다. 금액은 괜찮은데

하지만 날짜는 이전행을 기준으로 한달씩 증가되어야한다.

 

<5차시도>

 

LAG함수쓰면 될거같은데 안되네....

아 된건가?

SELECT * FROM test.sequence;
use test;
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤','20200509','10000000');
INSERT INTO sequence (deposit_date,interest_amount) select date_add(now(),INTERVAL 1 MONTH),10000000* 0.04 /12;
 select deposit_date, LAG(deposit_date) over(order by deposit_date) from sequence;

 

<6차시도>

흠...

select deposit_date from sequence order by id desc limit 1;

마지막행선택함.

이렇게  마지막 행의 날짜를 선택하고 거기에 한달씩 더해주면 되지 않을까?

 


select date_add(deposit_date,INTERVAL 1 MONTH) from sequence where  deposit_date order by id desc limit 1;

오 됐다

한달 추가하겠다 마지막행으로 찾은 날짜에

 

 

 

 

 

ㅇㄴㄹㄴ

 

오됐다

 

 

INSERT INTO sequence (deposit_date,interest_amountselect date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 MONTH),(select deposit_amount from sequence where id='1')* 0.04 /12;

 

 

 

 

<종합해보면>

 

SELECT * FROM test.sequence;
use test;
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤','20200509','10000000');

 

INSERT INTO sequence (deposit_date,interest_amount) select date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 MONTH),(select deposit_amount from sequence where id='1')* 0.04 /12;

 

<7차시도>

아 이름도 같이 들어가게끔

INSERT INTO sequence (name, deposit_date,interest_amount) 
select (select name from sequence order by id desc limit 1) ,date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 MONTH),
(select deposit_amount from sequence where id='1')* 0.04 /12 ;

 

 

<결과>

 

 

use test;
insert into sequence (name,deposit_date,deposit_amount) values ('이소윤','20200509','10000000');
INSERT INTO sequence (name, deposit_date,interest_amount) 
select (select name from sequence order by id desc limit 1) ,date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 MONTH),
(select deposit_amount from sequence where id='1')* 0.04 /12 ;

근데 식이 너무 더러운데..

다시 정리해보자~

728x90

+ Recent posts