2012-11-11 9 views
5
name  point 
---------- 
steve  207 
Mary  203 
steve  205 
steve  200 
steve  139 
Mary  300 

मैं शर्त eqn साथ पंक्तियों के बीच का अंतर प्राप्त करना चाहते हैं = [(पंक्ति +1) - पंक्ति] जहां नाम = स्टीव, तो ठीक है के लिए मैं आदर्श रूप चाहेगा ,शर्तों के साथ दो पंक्तियों के बीच अंतर को खोजने के लिए कैसे

steve 2 //207 - 0 
steve 5 //205 - 207 
steve 61 //200 - 205 
steve 139 //139 - 200 

लगातार पंक्तियों के बीच अंतर खोजने के लिए कोड उपलब्ध हैं। लेकिन जब स्थिति जोड़ा जाता है तो यह काम नहीं करेगा।

+1

आप किस तरह तय करते जो पंक्ति 'row' है और जो पंक्ति' पंक्ति + 1' है? क्वेरी द्वारा लगाए गए स्पष्ट आदेश के बिना डेटाबेस से पंक्तियों को वापस करने के तरीके के लिए कोई आंतरिक आदेश नहीं है। – Ben

उत्तर

6

संपादित ओपी टिप्पणी मैंने आपके अनुरोध से मेल खाने के लिए क्वेरी बदल दी है।

LAG कर सकते हैं मदद करता है:

select name, 
    coalesce( 
     point - lag(point , 1, Null) over (order by point), 
     point) 
    as diff, 
    point || '-' || 
    LEAD(point , 1, 0) over (order by point) as prev_point 
    from t 
    where name = 'steve' 
    order by point desc 

Results:

| NAME | DIFF | PREV_POINT | 
----------------------------- 
| steve | 2 |  207-0 | 
| steve | 5 | 205-207 | 
| steve | 61 | 200-205 | 
| steve | 139 | 139-200 | 
+0

हालांकि यह इसे यादृच्छिक क्रम में प्रदान करता है। ओपी ऐसा नहीं लगता है। – Ben

+0

@ बेन, आप सही हैं। ओपी [फोर्क sqlfiddle] (http://sqlfiddle.com/#!4/6fb32/6/0) के लिए स्वतंत्र रहें जब ओपी आपकी टिप्पणी का उत्तर दे। सादर! – danihp

+0

धन्यवाद! यह काम करता हैं! – user1816507

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