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

https://stepby-yun.tistory.com/192?category=554522 

 

mysql while 여러시도..

https://stepby-yun.tistory.com/191 mysql procedure 프로시저 생성 및 실행 (구본문자 DELIMITER ) while문 해보려는데.. 나와같은 의문을 가지신 분 프로시저 꼭 만들어서 써야돼? https://stackoverflow.com/q..

stepby-yun.tistory.com

프리비어슬리~

 

새로 생긴 행이랑 이전 행 시간을 빼서 1분 이상일때마다

값을 넣어줄까? 했는데 무한insert되고 난리남

 

(이 글의 결론)

1분이 흐를때마다 ->이자증액값을 넣어준다

에서

값넣는다. 1분마다시간증가, 이자증액, 

이렇게

insert할때 한꺼번에 넣는 걸로 식만듦..(저번에 한달씩 증가랑 똑같이 함.)

------

 

 

 

기준 잡기의 중요성..

한 시간씩 증가하고

넣고 먼저 해보자

최대증가한 시간

몇번째 행의 시간이 얼만지 생각! 

 


 

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 where  deposit_date order by id desc limit 1),INTERVAL 1 hour),
((select deposit_amount from sequence where  deposit_amount order by id desc limit 1) + (select interest_amount from sequence where  interest_amount 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;
 


아 다음행에 insert 추가 되는게

마지막 id가 9이니까

 

10까지 뜨는거구나~!!

 

그래도 deposit_amount의 마지막행 10000000을 구해서 이자액 33333을 구했으면 

 

2번째 행에 deposit_amount도 들어갈 수 있는거 아닌가 왜 

 

null값이지? 

 

 

+

 

지금은 한번에 들어가는거니까 

날짜를 추가하고 추가될때마다 이자액이 찍히게 하면 되려나...

 

 

update써서 해보자

 

update 안되는이유 여기서 세팅 설정바꿔줘야함

https://lightblog.tistory.com/193

 

[MYSQL] 에러 번호 1175 Safe Update 해결방법

MySQL에서 쿼리를 실행하다보면 다음과 같은 에러를 마주할 때가 있다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable..

lightblog.tistory.com

오마갓 숫자를 ''

여기 넣어서 문자열로 만들어서 쓰고있었네

 

 

 

 

하지만 잘 안됨

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
DECLARE n varchar(45) default "이소윤" ;

while (select id from sequence order by id desc limit 1) < 10 do
INSERT INTO sequence (deposit_date) select (date_add((select deposit_date from sequence where  deposit_date order by id desc limit 1),INTERVAL 1 hour));

update sequence 
set 
name = n,
interest_amount =  (select deposit_amount where  deposit_amount order by id desc limit 1)* 0.04 /12;




end while;

end //
delimiter ;
call pro();

select * from test.sequence;


 

---

시간 증가만 insert해주고

나머지는 update로 넣어주려 했으나 잘안됨..

그래서 원래 한번에 다 insert한 걸로 수정함

 

중간에 null인거..

 

 

그냥 id가 2인거 조건으로 넣어줌..

이러면 안될거같지만

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 where  deposit_date order by id desc limit 1),INTERVAL 1 hour),
((select deposit_amount from sequence where  deposit_amount order by id desc limit 1) + (select interest_amount from sequence where  interest_amount order by id desc limit 1)),
(select deposit_amount from sequence where id='1')* 0.04 /12;


end while;
end //
delimiter ;

call pro();

update sequence 
set deposit_amount = 10000000
where id = 2;


select * from sequence;

 

 

 order by limit 1

를 쓰는 것보다 max가 좀더 빠르다는 얘기를 들음

내일 수정해봐야겠다

 

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