2014-11-03 7 views
6

टेबल से चुनें:आदेश एसक्यूएल बढ़ती

id | year |  score 
-----+------+----------- 
    12 | 2011 |  0.929 
    12 | 2014 |  0.933 
    12 | 2010 |  0.937 
    12 | 2013 |  0.938 
    12 | 2009 |  0.97 
    13 | 2010 |  0.851 
    13 | 2014 |  0.881 
    13 | 2011 |  0.885 
    13 | 2013 |  0.895 
    13 | 2009 |  0.955 
    16 | 2009 |  0.867 
    16 | 2011 |  0.881 
    16 | 2012 |  0.886 
    16 | 2013 |  0.897 
    16 | 2014 |  0.953 

वांछित आउटपुट:

id | year |  score 
-----+------+----------- 
    16 | 2009 |  0.867 
    16 | 2011 |  0.881 
    16 | 2012 |  0.886 
    16 | 2013 |  0.897 
    16 | 2014 |  0.953 

मैं उत्पादन स्कोर कि वर्ष के संबंध में वृद्धि हो रही है की कोशिश में कठिनाइयां आ रही हूँ। किसी भी मदद की सराहना की जाएगी।

+0

को लक्ष्य है 'आईडी' कॉलम के उच्चतम मूल्य से सभी रिकॉर्ड वापस करें? –

+1

आप किस SQL ​​का उपयोग कर रहे हैं? –

+1

क्या आप केवल हर साल उच्चतम स्कोर वापस करना चाहते हैं? – Sablefoste

उत्तर

7

तो आप id = 16 चुनना चाहते हैं क्योंकि यह केवल वही है जो लगातार बढ़ते मूल्यों को बढ़ा रहा है।

SQL समर्थन के कई संस्करण lag(), जो इस समस्या को हल करने में मदद कर सकते हैं। तुम्हें पता है, निर्धारित कर सकते हैं किसी दिए गए आईडी के लिए, अगर सब मूल्यों में वृद्धि या ऐसा करने से कम हो रही हैं:

select id, 
     (case when min(score - prev_score) < 0 then 'nonincreasing' else 'increasoing' end) as grp 
from (select t.*, lag(score) over (partition by id order by year) as prev_score 
     from table t 
    ) t 
group by id; 

फिर आप सभी का चयन कर सकते "बढ़ती" ids का उपयोग कर एक में शामिल होने:

select t.* 
from table t join 
    (select id 
     from (select t.*, lag(score) over (partition by id order by year) as prev_score 
      from table t 
      ) t 
     group by id 
     having min(score - prev_score) > 0 
    ) inc 
    on t.id = inc.id; 
+0

तो यह तब होता है जब एक ही स्कोर 'वृद्धि' के रूप में गिना जाता है? यदि अगले अनुक्रमिक वर्ष में दोहराया गया स्कोर परिणाम वापस नहीं करना था, तो यह न्यूनतम (स्कोर - prev_score)> 0' होगा? – Beth

+0

@ बेथ। । । मेरे अनुभव में, अक्सर जब "बढ़ने" शब्द का उपयोग किया जाता है, तो इसका वास्तव में अर्थ है "कम नहीं"। इसी प्रकार, "सकारात्मक" का अर्थ अक्सर "गैर-नकारात्मक" होता है। लेकिन, आप सही हैं, सवाल स्पष्ट रूप से बढ़ रहा है इसलिए मैंने '=' को हटा दिया। –

संबंधित मुद्दे