[英]How to compare and show if any changes in historical data in AWS Athena?
我有一個存儲歷史數據的表。 表的樣本結構是這樣的,
ID | 配置 | 用戶身份 | 團隊 | 創建於 |
---|---|---|---|---|
1 | “配置-01” | “用戶 01” | “開發” | “2022:08:28” |
2 | “配置-02” | “用戶 01” | “開發” | “2022:08:27” |
3 | “配置-01” | “用戶 01” | “開發” | “2022:08:26” |
4 | “配置-01” | “用戶 01” | “質量保證” | “2022:08:25” |
5 | “配置-01” | “用戶 01” | “質量保證” | “2022:08:24” |
6 | “配置-20” | “用戶 01” | “質量保證” | “2022:08:23” |
7 | “配置-01” | “用戶 01” | “質量保證” | “2022:08:22” |
8 | “配置-01” | “用戶 01” | “產品” | “2022:08:21” |
9 | “配置-01” | “用戶 01” | “產品” | “2022:08:20” |
10 | “配置-11” | “用戶 02” | “產品” | “2022:08:19” |
11 | “配置-15” | “用戶 02” | “產品” | “2022:08:18” |
現在,我需要根據 user-id 查詢數據,所以前 9 行將用於 user-id "user-01"。 從這 9 行中,我需要獲取每個團隊的最新兩行(基於 createdon)。 所以現在的表格看起來像這樣,
ID | 配置 | 用戶身份 | 團隊 | 創建於 |
---|---|---|---|---|
1 | “配置-01” | “用戶 01” | “開發” | “2022:08:28” |
2 | “配置-02” | “用戶 01” | “開發” | “2022:08:27” |
4 | “配置-01” | “用戶 01” | “質量保證” | “2022:08:28” |
5 | “配置-01” | “用戶 01” | “質量保證” | “2022:08:27” |
8 | “配置-01” | “用戶 01” | “產品” | “2022:08:28” |
9 | “配置-01” | “用戶 01” | “產品” | “2022:08:27” |
現在我需要將每個團隊的兩行與他們的配置列進行比較,並說明它們之間是否有變化。 所以我正在尋找的最終回應將是,
用戶身份 | 團隊 | 配置已更改 |
---|---|---|
“用戶 01” | “開發” | 真的 |
“用戶 01” | “質量保證” | 錯誤的 |
“用戶 01” | “產品” | 錯誤的 |
到目前為止,我已經能夠使用這個自連接查詢來看到具有相同團隊的行,
select * from table t1, table t2
where t1.id <> t2.id and t1.team = t2.team and t1.userid = "user-01"
我需要有關部件的 rest 的幫助。
生成查詢以實現此解決方案的任何幫助都將非常有幫助。 謝謝你
不知道為什么用 MySQL 和 Presto 都標記了它,但這里是 Presto/Trino 的方法。
您可以使用window 函數(特別是lag
以比較“當前”和“以前”記錄)並分組。 這是一個更通用的方法(沒有過濾,但很容易添加):
-- sample data
with dataset (id, config, userid, team, createdon) as (
values (1 , 'config-01', 'user-01', 'Dev', '2022:08:28'),
(2 , 'config-02', 'user-01', 'Dev', '2022:08:27'),
(3 , 'config-01', 'user-01', 'Dev', '2022:08:26'),
(4 , 'config-01', 'user-01', 'QA', '2022:08:25'),
(5 , 'config-01', 'user-01', 'QA', '2022:08:24'),
(6 , 'config-20', 'user-01', 'QA', '2022:08:23'),
(7 , 'config-01', 'user-01', 'QA', '2022:08:22'),
(8 , 'config-01', 'user-01', 'Prod','2022:08:21'),
(9 , 'config-01', 'user-01', 'Prod','2022:08:20'),
(10 , 'config-11', 'user-02', 'Prod','2022:08:19'),
(11 , 'config-15', 'user-02', 'Prod','2022:08:18')
)
-- query
select userid,
team,
max_by(configchanged, createdon) configchanged -- get last change status
from (
select *,
config != coalesce(lag(config) over (partition by userid, team order by createdon), config) configchanged -- coalesce is used just in case there is only one row
from dataset
)
group by userid, team
Output:
用戶身份 | 團隊 | 配置已更改 |
---|---|---|
用戶 01 | 質量保證 | 錯誤的 |
用戶 01 | 產品 | 錯誤的 |
用戶 01 | 開發 | 真的 |
用戶 02 | 產品 | 真的 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.