programing

값에 따라 테이블의 두 열을 "병합"하고 DateTime 유형 열에서 가장 최근 날짜를 선택하는 mysql 테이블 보기 만들기

minimums 2023. 9. 15. 20:52
반응형

값에 따라 테이블의 두 열을 "병합"하고 DateTime 유형 열에서 가장 최근 날짜를 선택하는 mysql 테이블 보기 만들기

다음과 같은 MySQL 데이터베이스 테이블이 있습니다.

신분증 ref_A ref_B ref_Id dateLog
1 5 2 XX 2019-12-20
2 2 5 XX 2020-12-25
3 5 2 XX 2021-04-01
4 3 2 YY 2021-04-12
5 2 3 YY 2021-04-13

두 열의 조합 발생을 고유한 "관계"로 취급하는 테이블 보기를 작성하고 가장 최근 발생 날짜를 선택합니다.위에서 본 바와 같이 "5"와 "2" 사이의 조합이 3번 반복됨을 알 수 있습니다. 비록 수천 개의 조합일지라도 하나의 단일 관계로 취급해야 합니다. 마치 (2는 이벤트 XX, 5는 이벤트 XX, 2는 이벤트 YY, 등) 그리고 마지막 발생일도 있습니다.그래서 제가 원하는 테이블 뷰는 다음과 같습니다.

ref_결합 ref_Id lastUpdate
5 XX 2021-04-01
2 XX 2021-04-01
3 YY 2021-04-13
2 YY 2021-04-13

"CREATE VIEW vw_Table AS(...)" 내부에 선택 항목을 마운트하는 방법을 모르겠습니다. 누군가 이것에 대해 도와줄 수 있습니까?

한 줄이 아니라 두 로 결과를 원하는 이유가 무엇인지 잘 모르겠습니다.그래서 저는 다음을 추천합니다.

select least(ref_A, ref_B), greatest(ref_A, ref_B), ref_id,
       max(date_log)
from t
group by least(ref_A, ref_B), greatest(ref_A, ref_B), ref_id;

특정 ID를 원할 경우 다음을 추가합니다.

where 5 in (ref_A, ref_B)

이 무투표가 꼭 필요한 경우 다음을 사용할 수 있습니다.

select least(ref_A, ref_B) as ref_Combined, ref_id, max(date_log)
from t
group by least(ref_A, ref_B), greatest(ref_A, ref_B), ref_id
union all
select greatest(ref_A, ref_B) as ref_Combined, ref_id, max(date_log)
from t
group by least(ref_A, ref_B), greatest(ref_A, ref_B), ref_id;
SELECT LEAST(ref_a, ref_b) ref_Combined, 
       ref_Id,
       MAX(dateLog) lastUpdate
FROM test
GROUP BY LEAST(ref_a, ref_b), GREATEST(ref_a, ref_b), ref_id
UNION ALL
SELECT GREATEST(ref_a, ref_b), 
       ref_Id,
       MAX(dateLog)
FROM test
GROUP BY LEAST(ref_a, ref_b), GREATEST(ref_a, ref_b), ref_id
ORDER BY ref_Id, ref_Combined DESC

https://dbfiddle.uk/ ?rdbms=http_8.0&httple=80ed31679ba93fb8c7dc80c305854be0

혼자서 보기로 전환하세요. 이 일은 어렵지 않습니다.

언급URL : https://stackoverflow.com/questions/67188961/creating-a-mysql-table-view-that-merges-two-columns-from-a-table-depending-on

반응형