
MySQL Workbench 8.0을 사용하고 있습니다.
첫 번째 부분은 간단할 것이라고 생각하지만(그러나 현재 SQL 지식 수준을 약간 넘어서는 것임) 두 번째 부분은 그렇게 간단하지 않을 수 있으므로 질문을 두 부분으로 나누겠습니다.
질문 파트 1
다음과 같은 소스 데이터가 있습니다.
P키 | attr1 | attr2 | 데이터1 | 데이터2 |
---|---|---|---|---|
0 | ㅏ | 씨 | 1 | 14 |
1 | ㅏ | 씨 | 2 | 16 |
2 | ㅏ | 씨 | 삼 | 44 |
삼 | ㅏ | 디 | 1 | 91 |
4 | ㅏ | 디 | 2 | 9 |
5 | ㅏ | 디 | 삼 | 71 |
6 | 비 | 씨 | 1 | 31 |
7 | 비 | 씨 | 2 | 삼 |
8 | 비 | 씨 | 삼 | 38 |
9 | 비 | 디 | 1 | 1 |
10 | 비 | 디 | 2 | 111 |
11 | 비 | 디 | 삼 | 30 |
attr1
각각 은 attr2
두 가지 가능한 값을 갖습니다. attr1
의 가치를 가질 수 있다ㅏ그리고비. attr2
의 가치를 가질 수 있다씨그리고디. 따라서 쌍으로 결합된 이 두 필드는 네 가지 가능한 값을 갖습니다.교류,기원 후,기원전,BD.
data1
N개의 다른 값을 취할 수 있지만, 예제를 단순하게 유지하기 위해 위에는 3개만 표시되었습니다. 아래 질문에 대해 제공되는 솔루션은 data1
1~3 범위의 값으로 제한된다고 가정해서는 안 됩니다.
attr1
첫 번째 단계로 ( , attr2
) 쌍을 기반으로 행을 열로 변환하는 쿼리를 작성하고 싶습니다.교류,기원 후,기원전,BD, 다음과 같습니다:
데이터1 | 교류 | 기원 후 | 기원전 | BD |
---|---|---|---|---|
1 | 14 | 91 | 31 | 1 |
2 | 16 | 9 | 삼 | 111 |
삼 | 44 | 71 | 38 | 30 |
이 문제 설명에는 튜플 값( attr1
, attr2
, data1
)이 고유하다는 것이 암시되어 있습니다.
이를 수행하는 SQL 쿼리를 어떻게 작성할 수 있습니까?
질문 파트 2
내가 직면한 문제 중 더 어려운 부분은 튜플 값( attr1
, attr2
, data1
)이 위의 1부에서 가정한 것처럼 실제로 고유하지 않다는 것입니다.
내 데이터를 보다 정확하게 표현하면 다음과 같습니다.
P키 | attr1 | attr2 | 데이터1 | 데이터2 | RecCreated |
---|---|---|---|---|---|
0 | ㅏ | 씨 | 1 | 14 | 2024-01-01 13:00:00 |
1 | ㅏ | 씨 | 2 | 16 | 2024-01-01 13:00:00 |
2 | ㅏ | 씨 | 삼 | 44 | 2024-01-01 13:00:00 |
삼 | ㅏ | 디 | 1 | 91 | 2024-01-01 13:00:01 |
4 | ㅏ | 디 | 2 | 9 | 2024-01-01 13:00:02 |
5 | ㅏ | 디 | 삼 | 71 | 2024-01-01 13:00:02 |
6 | 비 | 씨 | 1 | 31 | 2024-01-01 13:00:02 |
7 | 비 | 씨 | 2 | 삼 | 2024-01-01 13:00:02 |
8 | 비 | 씨 | 삼 | 38 | 2024-01-01 13:00:02 |
9 | 비 | 디 | 1 | 1 | 2024-01-01 13:00:03 |
10 | 비 | 디 | 2 | 111 | 2024-01-01 13:00:03 |
11 | 비 | 디 | 삼 | 30 | 2024-01-01 13:00:03 |
12 | ㅏ | 씨 | 1 | 66 | 2024-03-21 09:57:20 |
13 | ㅏ | 씨 | 2 | 23 | 2024-03-21 09:57:20 |
14 | ㅏ | 씨 | 삼 | 54 | 2024-03-21 09:57:21 |
15 | ㅏ | 디 | 1 | 19 | 2024-03-21 09:57:21 |
16 | ㅏ | 디 | 2 | 18 | 2024-03-21 09:57:21 |
17 | ㅏ | 디 | 삼 | 33 | 2024-03-21 09:57:22 |
18 | 비 | 씨 | 1 | 87 | 2024-03-21 09:57:22 |
19 | 비 | 씨 | 2 | 19 | 2024-03-21 09:57:22 |
20 | 비 | 씨 | 삼 | 9 | 2024-03-21 09:57:22 |
21 | 비 | 디 | 1 | 10 | 2024-03-21 09:57:23 |
22 | 비 | 디 | 2 | 83 | 2024-03-21 09:57:23 |
23 | 비 | 디 | 삼 | 13 | 2024-03-21 09:57:23 |
이제 볼 수 있듯이 ( attr1
, attr2
, data1
) 튜플은 두 번 이상 나타날 수 있습니다. 위의 경우, 가능한 각 튜플은 두 번 나타납니다(그런 튜플이 나타날 수 있는 횟수에 대한 고정된 제한은 없지만).
다음을 반환하기 위해 개발하려는 쿼리를 원합니다.
데이터1 | 교류 | 기원 후 | 기원전 | BD |
---|---|---|---|---|
1 | 14 | 91 | 31 | 1 |
2 | 16 | 9 | 삼 | 111 |
삼 | 44 | 71 | 38 | 30 |
1 | 66 | 19 | 87 | 10 |
2 | 23 | 18 | 19 | 83 |
삼 | 54 | 33 | 9 | 13 |
문제는 AC
, AD
, BC
및 의 어떤 값이 BD
주어진 값과 함께 그룹화되어야 하는지를 아는 것입니다 data1
. 예를 들어 위에 표시된 원하는 그룹화 대신 data1
= 1에 대해 다음과 같은 (잘못된) 그룹화가 선택되었을 수 있습니다.
데이터1 | 교류 | 기원 후 | 기원전 | BD |
---|---|---|---|---|
1 | 14 | 19 | 31 | 10 |
1 | 66 | 91 | 87 | 1 |
그룹화를 올바르게 구성해야 하는 유일한 것은 필드입니다 RecCreated
. 시간상 "서로 가까운" 값은 함께 그룹화되어야 합니다. 물론 이를 위해서는 "함께 가까이"를 정의해야 합니다. 이 게시물의 목적에 따라 그룹을 다음 범위에 있는 값 집합으로 정의하겠습니다.3 분RecCreated
분야를 기반으로 서로의
이를 수행하는 SQL 쿼리를 어떻게 작성할 수 있습니까?