मैं PostgreSQL 9.2 में निम्न तालिका जो समय टिकटों शामिल हैं: (समय क्षेत्र के बिना टाइमस्टैम्प)PostgreSQL
gid [पी] (bigserial), timestamp_mes, time_diff (अंतराल)
1, 2012-01-23 11:03:40, खाली
2, 2012-01-23 11:03:42, खाली
3, 2012-01-23 11:03:44, खाली
मैंने एक अंतराल कॉलम (time_diff) जोड़ा है और टी के परिणामस्वरूप समय अंतर मानों को भरना चाहता हूं उसकी क्वेरी:
SELECT timestamp_mes - lag(timestamp_mes, 1)
over (order by timestamp_mes) as diff
from gc_entretien.trace order by timestamp_mes
मैं time_diff स्तंभ अद्यतन करने के लिए निम्न क्वेरी की कोशिश की है, कोई सफलता के साथ:
UPDATE gc_entretien.trace set time_diff =
(SELECT trace.timestamp_mes - lag(trace.timestamp_mes, 1)
over (order by trace.timestamp_mes)
from gc_entretien.trace order by timestamp_mes);
यह एक त्रुटि में परिणाम है:
ERROR: more than one row returned by a subquery used as an expression
मैं कैसे आगे बढ़ना चाहिए टाइम फर्क क्वेरी के परिणामस्वरूप मान_डिफ कॉलम को अपडेट करने के लिए? क्योंकि आपके सबक्वेरी कई परिणाम देता है
अपने ऐप के तर्क के बारे में निश्चित नहीं है, लेकिन चयन संभवतः अधिक पंक्तियां देता है जो त्रुटि का कारण बनता है एस में असाइन करना इंजेल कॉलम (जैसे आप अपने 'अपडेट' में करते हैं) ... यदि परिणाम आपकी 'SELECT' में लौटाई गई पहली पंक्ति में है, तो असाइनमेंट को संभव बनाने के लिए' LIMIT 1' का उपयोग करें। वैसे भी चयन सही ढंग से डिजाइन नहीं प्रतीत होता है। –
@ कमिलरोट - इसमें एक समस्या है; क्योंकि सबक्वायरी (वर्तमान में) असंबद्ध है, 'LIMIT 1' केवल शीर्ष पंक्ति, अवधि को वापस कर देगा, न कि वर्तमान पंक्ति के साथ कुछ भी करने के लिए। –
@ क्लॉकवर्क-म्यूज़न सही, यही कारण है कि मैं कहता हूं कि यह सही ढंग से डिज़ाइन की गई क्वेरी नहीं है।पहले @jatobat को एक प्रश्न को वापस करने की आवश्यकता होती है (जिसे वह एप्लिकेशन तर्क के अनुसार चाहिए) और उसके बाद इसे 'UPDATE' क्वेरी' में subquery के रूप में रखें ... सामान्य परिदृश्य तालिका से कुछ पहचानकर्ता/मानों का उपयोग करना है (resp पंक्ति पंक्ति) subquery 'WHERE' खंड में शर्त (ओं) के रूप में subquery में अद्यतन किया जा रहा है। लेकिन स्पष्ट रूप से कहा: मैं ऐप के तर्क को समझ नहीं पा रहा हूं और यहां तक कि इसे समझना नहीं चाहता :-) –