ओरेकल में, मैं सूची में चयन के आधार पर अंतिम घटना के लिए एक टेबल पर एक अद्यतन करना चाहता हूं, जैसे कुछ:
UPDATE table t1
set t1.fieldA = 0
where t1.id in (
select t2.id, max(t2.TIMESTAMP)
from table t2
where t2.id in (1111,2222,33333)
group by t2.id
);
यह क्वेरी काम नहीं करती है, मुझे "बहुत अधिक मान" त्रुटि मिली है। कोई विचार? धन्यवाद
2 जवाब
मेरा मानना है कि ऑरैकल कई कॉलम का समर्थन करता है, ताकि आप कोशिश कर सकें:
UPDATE table t1
set t1.fieldA = 0
where
(t1.id,t1.timestamp) in ( select t2.id, max(t2.TIMESTAMP) from table t2 where t2.id in (1111,2222,33333) group by t2.id );
अनिवार्य रूप से यदि आप IN के दाईं ओर एक उपश्रेणी प्रदान कर रहे हैं जिसका परिणाम दो स्तंभों के साथ सेट है, तो आपको IN के बाईं ओर कोष्ठक में दोनों स्तंभों के नाम प्रदान करने होंगे
संयोग से, मुझे अधिकतम मूल्य के आधार पर अपडेट करना कभी पसंद नहीं आया यदि आवश्यकता यह है कि केवल एक पंक्ति को अपडेट किया जाए, क्योंकि समान अधिकतम मान वाली दो पंक्तियों को अपडेट किया जाएगा। इस प्रकार की क्वेरी बेहतर है:
Update table
Set fieldA=0
Where rowid in(
select rowid from (
select rowid, row_number() over(partition by id order by timestamp desc
) as rown from table
) where rown=1)
यदि, हालांकि, टेबल पर आपकी प्राथमिक कुंजी में कंपाउंड के हिस्से के रूप में टाइम स्टैंप शामिल है, तो यहां एक ही आईडी/टाइमस्टैम्प के साथ दो पंक्तियां होने की कोई चिंता नहीं है .. यह शायद ही कभी मामला है!
आपके उप-चयन में 2 (बहुत अधिक) फ़ील्ड हैं, इसलिए इसकी तुलना आईडी से नहीं की जा सकती। टाइमस्टैम्प की तुलना अधिकतम टाइमस्टैम्प से करें।
UPDATE table t1 set t1.fieldA = 0
where t1.TIMESTAMP = (select max(t2.TIMESTAMP) from table t2 where t2.id = t1.id )
and id in (1111,2222,33333)
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।