MySQL: 필드 값을 기반으로 행을 열로 변환

MySQL: 필드 값을 기반으로 행을 열로 변환

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.

data1N개의 다른 값을 취할 수 있지만, 예제를 단순하게 유지하기 위해 위에는 3개만 표시되었습니다. 아래 질문에 대해 제공되는 솔루션은 data11~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 쿼리를 어떻게 작성할 수 있습니까?

관련 정보