MySQL:根据字段值将行转换为列

MySQL:根据字段值将行转换为列

我正在使用 MySQL Workbench 8.0。

我将我的问题分成两部分,因为我相信第一部分很简单(但稍微超出我目前的 SQL 知识水平),但第二部分可能不是那么简单。

问题 1

我有以下源数据:

密钥 属性1 属性2 数据1 数据2
0 A C 1 14
1 A C 2 16
2 A C 3 四十四
3 A 1 91
4 A 2 9
5 A 3 71
6 C 1 31
7 C 2 3
8 C 3 三十八
9 1 1
10 2 111
11 3 三十

attr1并且attr2每个都有两个可能的值。attr1可以取值A.attr2可以取以下值C。因此,这两个字段作为一对合在一起有四个可能的值:交流广告公元前屋宇署

data1可以取 N 个不同的值,但为了使示例简单,上面只显示了三个。下面针对我的问题提供的任何解决方案都不应假设data1仅限于 1 - 3 范围内的值。

作为第一步,我想编写一个基于(attr1attr2)对将行转换为列的查询交流广告公元前屋宇署, 如下:

数据1 交流 广告 公元前 屋宇署
1 14 91 31 1
2 16 9 3 111
3 四十四 71 三十八 三十

这个问题陈述中隐含的是元组值(attr1,,attr2data1是唯一的。

我怎样才能编写一个 SQL 查询来实现这一点?

问题第 2 部分

我所面临的问题中更具挑战性的部分是元组值(attr1,,)实际上并不唯一,正如上面第 1 部分所假设的那样attr2data1

以下是我的数据的更准确表示:

密钥 属性1 属性2 数据1 数据2 记录创建
0 A C 1 14 2024-01-01 13:00:00
1 A C 2 16 2024-01-01 13:00:00
2 A C 3 四十四 2024-01-01 13:00:00
3 A 1 91 2024-01-01 13:00:01
4 A 2 9 2024-01-01 13:00:02
5 A 3 71 2024-01-01 13:00:02
6 C 1 31 2024-01-01 13:00:02
7 C 2 3 2024-01-01 13:00:02
8 C 3 三十八 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 3 三十 2024-01-01 13:00:03
12 A C 1 66 2024-03-21 09:57:20
十三 A C 2 23 2024-03-21 09:57:20
14 A C 3 54 2024-03-21 09:57:21
15 A 1 19 2024-03-21 09:57:21
16 A 2 18 2024-03-21 09:57:21
17 A 3 33 2024-03-21 09:57:22
18 C 1 87 2024-03-21 09:57:22
19 C 2 19 2024-03-21 09:57:22
20 C 3 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 3 十三 2024-03-21 09:57:23

现在可以看出,( attr1, attr2, data1) 元组可以出现多次。在上述情况下,每个可能的元组都会出现两次(尽管对于此类元组可以出现多少次并没有固定的限制)。

我希望我尝试开发的查询返回以下内容:

数据1 交流 广告 公元前 屋宇署
1 14 91 31 1
2 16 9 3 111
3 四十四 71 三十八 三十
1 66 19 87 10
2 23 18 19 83
3 54 33 9 十三

问题在于知道ACADBC和中的哪些值BD应该与 的值分组在一起data1。例如,除了上面显示的期望分组之外,data1还可以选择 = 1 的以下(不正确的)分组:

数据1 交流 广告 公元前 屋宇署
1 14 19 31 10
1 66 91 87 1

我唯一需要正确形成分组的就是字段RecCreated。时间上“接近”的值应该分组在一起。当然,这需要定义“接近”。为了便于理解,我们将组定义为一组值,这些值在3分钟RecCreated基于领域的相互

我怎样才能编写一个 SQL 查询来实现这一点?

相关内容