我的表中有以下数据:
受赠人 | TTNAME | 已插入 | 允许删除 | 允许更新 | 禁止 | 时间戳 |
---|---|---|---|---|---|---|
用户 1 | TABLE_A | Y | Y | Y | 2023-01-01 | |
用户 1 | TABLE_A | Y | 2023-01-02 |
我想要一个 SQL select 语句,我可以在其中将这两行合并为一个结果,因为我对被授予者对表名 (TTNAME) 的权限感兴趣。时间戳列应该无关紧要/被忽略。
我想要以下结果:
受赠人 | TTNAME | 已插入 | 允许删除 | 允许更新 | 禁止 |
---|---|---|---|---|---|
用户 1 | TABLE_A | Y | Y | Y | Y |
我尝试了几种选择,但没有一种有效。我总是得到 2 行分隔的结果。我想是因为他们有不同的时间戳!?
我得到:
受赠人 | TTNAME | 已插入 | 允许删除 | 允许更新 | 禁止 |
---|---|---|---|---|---|
用户 1 | TABLE_A | Y | Y | Y | |
用户 1 | TABLE_A | Y |
我尝试了以下陈述:
SELECT GRANTEE, TTNAME, INSERTALLOWED, DELETEALLOWED, UPDATEALLOWED, SELALLOWED
FROM AUTHTABLE
WHERE GRANTEE='USER1' AND TTNAME='TABLE_A'
GROUP BY GRANTEE, TTNAME, INSERTALLOWED, DELETEALLOWED, UPDATEALLOWED, SELALLOWED;
SELECT A.GRANTEE, A.TTNAME, A.INSERTALLOWED, A.DELETEALLOWED, A.UPDATEALLOWED, A.SELALLOWED
FROM AUTHTABLE AS A
INNER JOIN AUTHTABLE AS B
ON A.GRANTEE=B.GRANTEE AND A.TTNAME=B.TTNAME
AND A.TIMESTAMP<=B.TIMESTAMP
WHERE A.GRANTEE='USER1' AND A.TTNAME='TABLE_A';
有没有办法将这两行合并为一行(通过忽略时间戳)?
任何帮助表示赞赏。谢谢。
以下 SQL 正在运行:
SELECT GRANTEE, TTNAME,
MAX(INSERTALLOWED) as INSERTALLOWED,
MAX(DELETEALLOWED) as DELETEALLOWED,
MAX(UPDATEALLOWED) AS UPDATEALLOWED,
MAX(SELALLOWED) as SELALLOWED
FROM AUTHTABLE
WHERE GRANTEE='USER1' AND ttname='TABLE_A'
GROUP BY GRANTEE, TTNAME;