두개의 테이블에서 날짜 비교 후 제일 나중에 있는 값이 있는 테이블의 값을 어떻게 구할까요?

두개의 테이블에서 날짜 비교 후 제일 나중에 있는 값이 있는 테이블의 값을 어떻게 구할까요?

QA

두개의 테이블에서 날짜 비교 후 제일 나중에 있는 값이 있는 테이블의 값을 어떻게 구할까요?

본문

어떻게 설명을 해야 될지 참 난감하지만 질문 드립니다.

A와 B테이블이 있습니다.

ID로 검색 해서 나중의 데이터가 있는 테이블의 값을 구하려고 하는데 도저희 모르겠어서 여쭤봅니다.

예를 들어 

A Table

머니 날짜 아이디
10000 2021-03-06 12:00:00 aaa
10000 2021-03-06 11:00:00 bbb
10000 2021-03-06 09:00:00 aaa
10000 2021-03-06 08:00:00 bbb

 

B Table

Money dateTime 아이디
5000 2021-03-06 11:00:00 aaa
5000 2021-03-06 11:50:00 bbb
5000 2021-03-06 10:00:00 aaa
5000 2021-03-06 07:00:00 bbb

와 같은 경우 조건 아이디를 aaa로 했을 경우 값은 A테이블의 맨 상단머니

bbb의 값은 B테이블의 두번째행 을 구하려고 합니다.

이럴 때는 쿼리를 어떻게 짜야 가능할까요?

 

나중에는 그 값들의 SUM을 구하려고 합니다.

 

알려주시면 정말 감사드리겠습니다. ㅠㅠ

이 질문에 댓글 쓰기 :

답변 6

어렵게 생각할 거 있나요?

A테이블에서 날짜가 최근인 aaa하나 구하고 B테이블에서 날짜가 최근인 aaa 하나 구해서

둘 중 날짜가 큰 것을 취하면 될 것인데요

 

그 값들의 SUM을 구하려고 <--이건 무슨 말인지 이해불가

 

제가 최종으로 하려는 목적은 두 테이블 안에 aaa, bbb 같은 아이디들의 가장 최근 값들의 합을 구하려고 하는 것입니다.

"조건 아이디를 aaa로 했을 경우 값은 A테이블의 맨 상단머니" 이부분 같은 경우 두 테이블 중에 aaa 의 가장 최근 값은 A테이블의 최상단에 있는 데이터가 가장 최근 값이고요

설명을 잘 못하는 점 양해부탁드리겠습니다.

select money from aaa where userId = 'aaa' where time = (select max(time) from aaa);

select money from bbb where userId = 'bbb' where time = (select max(time) from bbb);

 

select aaa.money + bbb.money

from

(select money from aaa where userId = 'aaa' where time = (select max(time) from aaa)) aaa, 

(select money from bbb where userId = 'bbb' where time = (select max(time) from bbb)) bbb;

 

원하시는 목표를 설명하시는 것이 질문 내용을 이해하기 쉬울 수 있습니다.

https://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results

group by user_id했을 때 다른 컬럼의 값이 최고인 row를 뽑는 sql입니다.

 

 

SELECT a.*
FROM `tblA` a                    
  LEFT JOIN `tblB` b             
      ON a.userid = b.userid AND a.dateTime < b.dateTime
WHERE b.dateTime is NULL

 

최대값(날짜)가 tblA에 있는지 tblB에 있는 모르니까

 

위 query에서 join 순서를 바꾸어서 한 번 하면 되지 않을까요?

테이블 a 와 테이블 b에서 userId 가 aaa이고 date가 가장 최근인 레코드의 money 값

 

select money from a, b

where a.userId = b.userId

and a.userId = 'aaa'

and date == (select max(date) from a, b where a.userId = b.userId and a.userId= 'aaa' group by userId)

 

 

 

 

 

마지막 자문자답이 정답입니다.. 

답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT