sql - SQL 根据列的审计跟踪中的值返回 1 或 0
问题描述
如果我有一张如下表:
ID_ | last_updated_by |
---|---|
1 | 机器人 |
1 | 人类 |
1 | 机器人 |
2 | 机器人 |
3 | 机器人 |
3 | 人类 |
使用 SQL,我如何按 ID 分组并创建一个新列来指示人类是否曾经更新过这样的记录:
ID_ | last_updated_by | 更新人 |
---|---|---|
1 | 机器人 | 1 |
2 | 机器人 | 0 |
3 | 机器人 | 1 |
更新
我目前正在执行以下操作,尽管我不确定这有多有效。选择最新记录,然后通过子选择将其与我的计算列合并。
SELECT MAIN.TRANSACTION_ID,
MAIN.CREATED_DATE
MAIN.CREATED_BY_USER_ID,
MAIN.OWNER_USER_ID,
STP.TOUCHED_BY_HUMAN
FROM (
SELECT TRANSACTION_ID,
CREATED_DATE
CREATED_BY_USER_ID_
OWNER_USER_ID_
FROM TABLE_NAME
WHERE CREATED_DATE >= CAST('{start_date} 00:00:00' AS TIMESTAMP)
AND CREATED_DATE <= CAST('{end_date} 23:59:59' AS TIMESTAMP)
QUALIFY row_number() OVER (partition by TRANSACTION_ID order by End_Dt desc) = 1
) MAIN
LEFT JOIN (
SELECT TRANSACTION_ID,
CASE
WHEN CREATED_BY_USER_ID IN ('ROBOT', 'MACHINE') OR
CREATED_BY_USER_ID LIKE 'N%' OR
CREATED_BY_USER_ID IS NULL
THEN 0
ELSE 1 END AS CREATED_BY_HUMAN,
CASE
WHEN OWNER_USER_ID IN ('ROBOT', 'MACHINE') OR
OWNER_USER_ID LIKE 'N%' OR
OWNER_USER_ID IS NULL
THEN 0
ELSE 1 END AS OWNED_BY_HUMAN,
CASE
WHEN CREATED_BY_HUMAN = 0 AND
OWNED_BY_HUMAN = 0
THEN 0
ELSE 1 END AS TOUCHED_BY_HUMAN_
FROM TABLE_NAME
WHERE CREATED_DATE >= CAST('{start_date} 00:00:00' AS TIMESTAMP)
AND CREATED_DATE <= CAST('{end_date} 23:59:59' AS TIMESTAMP)
QUALIFY row_number() OVER (partition by TRANSACTION_ID order by TOUCHED_BY_HUMAN_ desc) = 1
) STP
ON MAIN.TRANSACTION_ID = STP.TRANSACTION_ID
解决方案
这是您的查询到条件聚合的 1:1 转换:
SELECT TRANSACTION_ID,
CREATED_DATE,
CREATED_BY_USER_ID,
OWNER_USER_ID,
Max(CASE
WHEN CREATED_BY_USER_ID IN ('ROBOT', 'MACHINE') OR
CREATED_BY_USER_ID LIKE 'N%' OR
CREATED_BY_USER_ID IS NULL
THEN 0
ELSE 1
END) Over (PARTITION BY TRANSACTION_ID) AS CREATED_BY_HUMAN
FROM Table_Name
WHERE CREATED_DATE >= Cast('{start_date} 00:00:00' AS TIMESTAMP)
AND CREATED_DATE <= Cast('{end_date} 23:59:59' AS TIMESTAMP)
QUALIFY Row_Number() Over (PARTITION BY TRANSACTION_ID ORDER BY End_Dt DESC) = 1
推荐阅读
- html - 在看似有效的 URL 上违反 Content-Security-Policy
- c# - FromUri 删除参数
- go - 如何从 kubectl describe pods 中检索所有数据
来自集群内 client-go api 调用 - python - Django 将请求发布到详细信息页面 (Id)
- php - 如何在php中设置小数点后最多8位
- python - 无法在 Ubuntu 中的 Python 的 Plotyl 中生成 eps 或 pdf 图表
- python - 通过python错误将数据导入MS ACCESS
- google-cloud-platform - 在日志中查看请求正文/参数或响应
- xml - 正则表达式将标签之间的单词大写
- android - Google 64-bit requirement only works for some apps