मैं ओरेकल पीएल/एसक्यूएल का उपयोग कर रहा हूं।पीएल/एसक्यूएल में, आप अगली पंक्ति के आधार पर पंक्ति कैसे अपडेट करते हैं?
मैं एक टाइमस्टैंप तालिका टी है, और मुझे पिछली पंक्ति के समान होने के लिए स्तंभ एक के लिए एक पंक्ति का मूल्य निर्धारित करना चाहते हैं, अगर वे कॉलम बी और समय-चिह्न के अनुसार क्रमबद्ध रहे हैं, बशर्ते कि टाइम स्टांप नहीं हैं 45 सेकंड से अधिक अलग।
UPDATE T t_curr
SET A =
(SELECT A
FROM T t_prev
INNER JOIN t_curr
ON (t_prev is the row right before t_curr, when you sort by B and Timestamp)
AND t_curr.Timestamp - t_prev.Timestamp < 45
)
मैं इस कोशिश की:
UPDATE T t_curr
SET A =
(SELECT A
FROM T t_prev
INNER JOIN t_curr
ON RANK (t_curr)
OVER (B, Timestamp)
= 1 + RANK (t_prev)
OVER (B, Timestmap)
AND t_curr.Timestamp - t_prev.Timestamp < 45
)
लेकिन मुझे मिल गया:
स्यूडोकोड में, यह कुछ की तरह है
त्रुटि (38,16): PL/SQL: ओआरए -00 9 34: समूह समारोह की अनुमति नहीं है
रैंक के पहले उदाहरण पर इशारा करते हुए।
मैंने क्या गलत किया, और मैं यह अधिकार कैसे प्राप्त करूं?
के बारे में मैं 'का उपयोग कर lag' या' lead' सुझाव देने के लिए था, लेकिन है कि या तो काम कर सकते हैं नहीं है ... या आप की कोशिश कर सकते 'अद्यतन टी से एक = Q1.A चयन सेट ((चयन टी से एक, ROWNUM आर 1) Q1 Q1.r1 = Q2.r2-1) ' – FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner पर बाहरी छोड़ दिया में शामिल होने के (ए का चयन करें, टी से ROWNUM r2) Q2 - आप सही है कि अंतराल कर रहे हैं और मुझे एक ही समस्या मिल ले जाते हैं। मुझे संकलन करने के लिए आपके अन्य सुझावों के आधार पर कुछ मिला, हालांकि, धन्यवाद! अगर आप इसे स्वीकार करने के लिए इसे जवाब में कॉपी करना चाहते हैं, तो यह ठीक होगा। –
हो गया! (मैं क्योंकि मैं एक अद्यतन के लिए यह करने की कोशिश की और यह सुनिश्चित करें कि यह काम करेगा नहीं था कभी नहीं किया है पहली बार में टिप्पणी के रूप में तैनात);) – FrustratedWithFormsDesigner