테스트 사이트 - 개발 중인 베타 버전입니다

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

무시기2 4년 전 조회 5,359

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

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개

SoCools
4년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

무시기2
4년 전
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

4년 전

시간이 없어 테이블을 새로 만들어서 입력 해서 원하는 결과를 도출 했습니다. 답변 감사드립니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

ssyy2
4년 전

테이블 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)

 

 

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

https://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results" rel="nofollow noreferrer noopener" target="_blank">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 순서를 바꾸어서 한 번 하면 되지 않을까요?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

ssyy2
4년 전

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;

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

4년 전

어렵게 생각할 거 있나요?

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

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

 

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

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

무시기2
4년 전
여러개의 아이디의 값들을 구해야 되고 그 값들의 합을 또 구해야 되서요..
균이
4년 전
조건 아이디를 aaa로 했을 경우 값은 A테이블의 맨 상단머니 <--그렇다면 질문내용이 왜 이런가요?
무시기2
4년 전
제가 최종으로 하려는 목적은 두 테이블 안에 aaa, bbb 같은 아이디들의 가장 최근 값들의 합을 구하려고 하는 것입니다.

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인