2013-06-06 4 views
5

मेरे पास एक सारणी है जिसमें पंक्तियों का एक टन (> 10 के) है। अधिकांश पंक्तियों में डुप्लिकेट भूमिकाउपयोगकर्ता नाम से जुड़े मान हैं।SQL सर्वर विशिष्ट नवीनतम मानों का चयन करें

मुझे क्या करना कोशिश कर रहा हूँ अलग से चयन पंक्तियों और नवीनतम भूमिकासे जोड़ा REQUEST_ID है। मेरे पास लगभग यह है, लेकिन मेरी पूंछ को मारने वाला हिस्सा nullअनुरोध_आईडी फ़ील्ड में से कुछ मान हैं क्योंकि उन कॉलम को जोड़ने से पहले उन अनुरोध किए गए थे। मैं अभी भी को select statement में शामिल करने की आवश्यकता है यदि उपयोगकर्ता ने अपडेट के बाद से कोई अन्य अनुरोध दर्ज नहीं किया है।

यहाँ

मेरी मेज संरचना का एक उदाहरण:

0 | jsmith | User | null 
5 | jsmith | Admin | 57 
6 | jsmith | Dude | 57 

यहाँ बयान मैं अब तक की कोशिश की है इस प्रकार हैं::

id | uname | role | request_id 
0 | jsmith | User | null 
1 | jsmith | Admin | null 
2 | jsmith | Dude | null 
3 | jsmith | Admin | 56 
4 | jsmith | Dude | 56 
5 | jsmith | Admin | 57 
6 | jsmith | Dude | 57 

यह वांछित परिणाम होगा

में शामिल हों
select distinct a.uname, a.role, a.request_id from (
    select * from das_table 
    ) 
b join das_table a on b.role = a.role and b.request_id = a.request_id 
where a.uname = 'jsmith' 

परिणाम: यह साथ पंक्तियों समाप्त REQUEST_ID = NULL

मैक्स()

यह मेरे लिए काम नहीं किया क्योंकि मुझे लगता है कि MAX()null मूल्यों गिनती नहीं करता है? मेरे सवाल मुझे लगता है कि यह दूसरों मैं इसकी पड़ताल की है से अलग request_id अशक्त जा रहा है की संभावना होने है बनाता में

एक चेतावनी:

select distinct uname, role, max(request_id) as request_id from das_table where uname='jsmith' 
group by uname, role, request_id 

इसी प्रकार के सवाल मैं देखा है।

Select distinct values from 1 column | SQL Server : select distinct by one column and by another column value | SQL Server select distinct hell

उत्तर

11

max क्वेरी काम नहीं किया है क्योंकि आप समूह में request_id शामिल - कोशिश:

select distinct uname, role, max(request_id) as request_id 
from das_table where uname='jsmith' 
group by uname, role 

SQLFiddle here

+0

धन्यवाद मार्क !! यह चाल है! – ckpepper02

+0

@ ckpepper02: खुशी है कि मैं मदद कर सकता हूं। –

1

ऐसा लगता है जैसे ISNULL आपकी समस्या का समाधान करेगा, मैं सादगी के लिए यहां 1 का उपयोग करता हूं लेकिन यदि आप अपने उपयोग के लिए अधिक समझदारी करते हैं तो आप -1 का उपयोग कर सकते हैं।

MAX(ISNULL(request_id, 1)) 
संबंधित मुद्दे