根据同一行的两列内容排除单行table

Excluding single row based on contents of two columns in the same table

希望你能帮助我。我有下面的查询成功运行并且 returns 可能有 100 行左右。

SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME

但是,在返回的数据集中有两行包含相同的项目名称,即

Domain      Project  Last Accessed
PASSENGERS  Alpha    2015-02-25 10:56:36
AIRPORTS    Alpha    2015-01-09 11:11:50

我想从数据集中明确排除 AIRPORTS Alpha 行。阅读其他帖子后,我尝试了下面的查询(及其变体),但返回了 0 行,这不是我想要的结果。

SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE NOT EXISTS (
    SELECT * FROM DB.td.SESSIONS_HISTORY
    WHERE SESSIONS_HISTORY.DOMAIN_NAME = 'AIRPORTS' AND SESSIONS_HISTORY.PROJECT_NAME = 'Alpha'
    )
AND SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME

如何修改查询以排除 AIRPORTS Alpha 行?请注意,我不需要基于日期字段排除的解决方案,只需要 DOMAIN_NAME 和 PROJECT_NAME 的组合。提前谢谢你。

试试这个

SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')

and (DOMAIN_NAME <> 'AIRPORTS' or PROJECT_NAME <> 'Alpha')

GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME

Select 相同 DOMAIN_NAME/PROJECT_NAME 组合的 end_time = max(end_time) 的行:

SELECT DOMAIN_NAME AS "Domain",
       PROJECT_NAME AS "Project",
       END_TIME AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY t1
WHERE USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
AND END_TIME = (SELECT MAX(END_TIME)
                FROM DB.td.SESSIONS_HISTORY t2
                WHERE USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
                  AND t1.DOMAIN_NAME = t2.DOMAIN_NAME
                  AND t1.PROJECT_NAME = t2.PROJECT_NAME)
ORDER BY DOMAIN_NAME, PROJECT_NAME
SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
AND DOMAIN_NAME <> 'AIRPORTS'
AND PROJECT_NAME <> 'Alpha'
GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME

提供了两个对我有效的答案。

感谢@Arvo:

SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
AND NOT (DOMAIN_NAME = 'AIRPORTS' AND PROJECT_NAME = 'Alpha')
GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME

感谢@ASh 同样有效:

SELECT DOMAIN_NAME AS "Domain", PROJECT_NAME AS "Project", MAX(END_TIME) AS "Last Accessed"
FROM DB.td.SESSIONS_HISTORY
WHERE SESSIONS_HISTORY.USER_NAME NOT IN ('UserA', 'UserB', 'UserC')
AND (DOMAIN_NAME <> 'AIRPORTS' or PROJECT_NAME <> 'Alpha')
GROUP BY DOMAIN_NAME, PROJECT_NAME
ORDER BY DOMAIN_NAME, PROJECT_NAME