
我正在使用 MySQL Workbench 8.0。
我將把我的問題分成兩部分,因為我相信第一部分會很簡單(但稍微超出我目前的 SQL 知識水平),但第二部分可能不那麼簡單。
問題第 1 部分
我有以下來源資料:
金鑰 | 屬性1 | 屬性2 | 數據1 | 數據2 |
---|---|---|---|---|
0 | A | C | 1 | 14 |
1 | A | C | 2 | 16 |
2 | A | C | 3 | 44 |
3 | A | D | 1 | 91 |
4 | A | D | 2 | 9 |
5 | A | D | 3 | 71 |
6 | 乙 | C | 1 | 31 |
7 | 乙 | C | 2 | 3 |
8 | 乙 | C | 3 | 38 |
9 | 乙 | D | 1 | 1 |
10 | 乙 | D | 2 | 111 |
11 | 乙 | D | 3 | 30 |
attr1
每個attr2
都有兩個可能的值。attr1
可以採用以下值A和乙。attr2
可以採用以下值C和D。因此,這兩個欄位作為一對組合在一起有四個可能的值:交流電,廣告,西元前,BD。
data1
可以採用 N 個不同的值,儘管為了保持範例簡單,上面只顯示了三個。以下針對我的問題提供的任何解決方案不應假定data1
僅限於 1 - 3 範圍內的值。
作為第一步,我想編寫一個基於 ( attr1
, attr2
)對將行轉換為列的查詢交流電,廣告,西元前,BD, 如下:
數據1 | 交流電 | 廣告 | 西元前 | BD |
---|---|---|---|---|
1 | 14 | 91 | 31 | 1 |
2 | 16 | 9 | 3 | 111 |
3 | 44 | 71 | 38 | 30 |
此問題陳述隱含的是元組值 ( attr1
, attr2
, data1
) 是唯一的。
我該如何編寫 SQL 查詢來完成此任務?
問題第 2 部分
我面臨的問題中更具挑戰性的部分是元組值 ( attr1
, attr2
, data1
) 實際上並不像上面第 1 部分中假設的那樣唯一。
這是我的數據更準確的表示:
金鑰 | 屬性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 | 44 | 2024-01-01 13:00:00 |
3 | A | D | 1 | 91 | 2024-01-01 13:00:01 |
4 | A | D | 2 | 9 | 2024-01-01 13:00:02 |
5 | A | D | 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 | 38 | 2024-01-01 13:00:02 |
9 | 乙 | D | 1 | 1 | 2024-01-01 13:00:03 |
10 | 乙 | D | 2 | 111 | 2024-01-01 13:00:03 |
11 | 乙 | D | 3 | 30 | 2024-01-01 13:00:03 |
12 | A | C | 1 | 66 | 2024-03-21 09:57:20 |
13 | A | C | 2 | 23 | 2024-03-21 09:57:20 |
14 | A | C | 3 | 54 | 2024-03-21 09:57:21 |
15 | A | D | 1 | 19 | 2024-03-21 09:57:21 |
16 | A | D | 2 | 18 | 2024-03-21 09:57:21 |
17 號 | A | D | 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 | 乙 | D | 1 | 10 | 2024-03-21 09:57:23 |
22 | 乙 | D | 2 | 83 | 2024-03-21 09:57:23 |
23 | 乙 | D | 3 | 13 | 2024-03-21 09:57:23 |
現在可以看出,( attr1
, attr2
, data1
) 元組可以出現多次。在上面的情況下,每個可能的元組出現兩次(儘管這樣的元組可以出現的次數沒有固定限制)。
我希望我嘗試開發的查詢返回以下內容:
數據1 | 交流電 | 廣告 | 西元前 | BD |
---|---|---|---|---|
1 | 14 | 91 | 31 | 1 |
2 | 16 | 9 | 3 | 111 |
3 | 44 | 71 | 38 | 30 |
1 | 66 | 19 | 87 | 10 |
2 | 23 | 18 | 19 | 83 |
3 | 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 查詢來完成此任務?