एक ही तालिका में दो स्तंभों की सामग्री के आधार पर एकल पंक्ति को छोड़कर - एसक्यूएल, एसक्यूएल-सर्वर -2008, एसक्यूएल-सर्वर-2012

मुझे आशा है आप मेरी मदद कर सकते हैं। मेरे पास नीचे दी गई क्वेरी है जो सफलतापूर्वक चलती है और शायद 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

मैं स्पष्ट रूप से एयरपोर्ट अल्फा को बाहर करना चाहता हूंडेटासेट से पंक्ति। अन्य पदों को पढ़ने के बाद मैंने नीचे दी गई क्वेरी (और इसके बदलाव) की कोशिश की है, लेकिन फिर मेरे पास 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

How can I amend my query to exclude the AIRPORTS अल्फा पंक्ति? कृपया ध्यान दें, मुझे ऐसे समाधान की आवश्यकता नहीं है जो दिनांक फ़ील्ड के आधार पर बहिष्कृत हो, केवल DOMAIN_NAME और PROJECT_NAME का संयोजन। पहले ही, आपका बहुत धन्यवाद।

उत्तर:

जवाब के लिए 0 № 1

पंक्तियों का चयन करें जहां समान 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

जवाब के लिए 0 № 2
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

जवाब के लिए 0 № 3

इसे इस्तेमाल करे

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

उत्तर के लिए -1 № 4

दो जवाब दिए गए थे जो मेरे लिए प्रभावी थे।

@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

संबंधित सवाल
सबसे लोकप्रिय