두개의 테이블에서 날짜 비교 후 제일 나중에 있는 값이 있는 테이블의 값을 어떻게 구할까요?
본문
어떻게 설명을 해야 될지 참 난감하지만 질문 드립니다.
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을 구하려고 <--이건 무슨 말인지 이해불가
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;
원하시는 목표를 설명하시는 것이 질문 내용을 이해하기 쉬울 수 있습니다.
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)
시간이 없어 테이블을 새로 만들어서 입력 해서 원하는 결과를 도출 했습니다. 답변 감사드립니다.
마지막 자문자답이 정답입니다..