मैं डेटा के समूह को लाने की कोशिश कर रहा हूं जिसमें सूची में और पिछले एन महीनों में ए/सी नंबर है। लेकिन जब मैंने नीचे दी गई क्वेरी की कोशिश की, तो यह मुझे त्रुटि दे रहा है!
नमूना डेटा:
date refnumber seq_no txt load_dt
20200310 016 01 emp1 20200309
20200310 016 01 emp1 20200305
20200310 016 02 row2 20200309
20200310 016 02 row2 20200305
20200310 016 03 row3 20200309
20200310 016 04 act 20200309
20200310 016 04 act 20200305
20200310 016 05 row4 20200309
20200310 016 05 row5 20200309
20200310 018 01 emp1 20200309
20200310 018 01 emp1 20200305
20200310 018 02 row2 20200309
20200310 018 02 row2 20200305
20200310 018 03 row3 20200309
20200310 018 04 row4 20200309
20200310 018 04 row4 20200305
20200310 018 05 row5 20200309
20200310 018 05 row5 20200305
मुझे यह जांचने की आवश्यकता है कि क्या text contains act
और load_dt is max of available load dt
और फिर पूरे समूह को उन अनुक्रमों के साथ लाएं और फिर सभी मानों को सम्मिलित करें
नमूना आउटपुट:
date ref_number message_txt load_dt
20200310 016 emp1|row2|row3|act|row5 20200309
क्वेरी मैंने अब तक कोशिश की है:
SELECT
DATE, REFNUMBER,
LISTAGG(CAST(TEXT AS VARCHAR(30000)), '|') WITHIN GROUP (ORDER BY CAST(SEQ_NO AS INT)) AS MESSAGE_TEXT FROM <table>
WHERE (DATE(date) BETWEEN (DATE('2020-03-10')-18 MONTHS) AND (DATE('2020-03-10')-1))
GROUP BY DATE, NUMBER
HAVING COUNT(
CASE WHEN text IN (comma separated list of records)
THEN 1 END
) > 0
ORDER BY DATE(DATE)
जब मैंने कम महीनों के लिए कोशिश की, तो यह ठीक काम कर रहा है लेकिन डुप्लिकेट को खत्म नहीं कर रहा है
जब मैंने 18 महीने कहने की कोशिश की, तो यह त्रुटि से नीचे है:
DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048, SQLERRMC=null, DRIVER=3.71.22
अग्रिम में धन्यवाद !
2 जवाब
त्रुटि संदेश देखें
db2 ? SQL1585
SQL1585N A temporary table could not be created because there is no
available system temporary table space that has a compatible page
size.
यह स्पष्ट रूप से आपको समस्या की ओर इशारा करता है - व्यवस्थापक से संपर्क करें और उसे उपयुक्त पृष्ठ आकार के साथ एक अस्थायी टेबलस्पेस जोड़ने के लिए कहें।
लिस्टैग में विशिष्ट के लिए समर्थन डीबी2 11.1 (यूनिक्स लिनक्स और विंडोज के लिए) में जोड़ा गया है। यदि आप Db2 के लिए किसी अन्य संस्करण या प्लेटफॉर्म का उपयोग करते हैं तो कृपया इसे निर्दिष्ट करें।
इसे इस तरह आजमाएं:
WITH TAB (date, refnumber, seq_no, text) AS
(
VALUES
('20200310', '016', '01', 'emp1')
, ('20200310', '016', '01', 'emp1')
, ('20200310', '016', '02', 'row2')
, ('20200310', '016', '02', 'row2')
, ('20200310', '016', '03', 'row3')
, ('20200310', '016', '04', 'act ')
, ('20200310', '016', '04', 'act ')
, ('20200310', '016', '05', 'row4')
, ('20200310', '016', '05', 'row5')
, ('20200310', '018', '01', 'emp1')
, ('20200310', '018', '01', 'emp1')
, ('20200310', '018', '02', 'row2')
, ('20200310', '018', '02', 'row2')
, ('20200310', '018', '03', 'row3')
, ('20200310', '018', '04', 'row4')
, ('20200310', '018', '04', 'row4')
, ('20200310', '018', '05', 'row4')
, ('20200310', '018', '05', 'row5')
)
SELECT
DATE, REFNUMBER
, LISTAGG(CAST(TEXT AS VARCHAR(3000)), '|') WITHIN GROUP (ORDER BY CAST(SEQ_NO AS INT)) AS MESSAGE_TEXT
FROM
(
SELECT DISTINCT DATE(TO_DATE(DATE, 'YYYYMMDD')) AS DATE, REFNUMBER, SEQ_NO, TEXT
FROM TAB
--WHERE DATE(TO_DATE(date, 'YYYYMMDD')) BETWEEN DATE('2020-03-10') - 18 MONTHS AND DATE('2020-03-10') - 1
)
GROUP BY DATE, REFNUMBER
--HAVING COUNT(CASE WHEN text IN (comma separated list of records) THEN 1 END) > 0
ORDER BY DATE;
परिणाम है:
|DATE |REFNUMBER|MESSAGE_TEXT |
|----------|---------|----------------------------------------------------------------------------------------------------|
|2020-03-10|016 |emp1|row2|row3|act |row4|row5 |
|2020-03-10|018 |emp1|row2|row3|row4|row4|row5 |
संबंधित सवाल
नए सवाल
db2
DB2 IBM द्वारा विकसित डेटाबेस सर्वरों का एक परिवार है। DB2 सर्वर के लिए समर्थित प्लेटफॉर्म z / OS (पूर्व में OS / 390), Linux, UNIX और Windows (सामूहिक रूप से LUW के लिए DB2 के रूप में संदर्भित), और IBM i (पूर्व में OS / 400 या i5 / OS) हैं। मूल रूप से एक रिलेशनल इंजन के रूप में डिज़ाइन किया गया, आईबीएम ने देशी एक्सएमएल समर्थन और आरडीएफ-अनुरूप ग्राफ स्टोर को शामिल करने के लिए कुछ प्लेटफार्मों पर DB2 की क्षमताओं का विस्तार किया है। DB2 प्रश्न पोस्ट करते समय, कृपया प्लेटफ़ॉर्म और संस्करण निर्दिष्ट करें।
max(load_dt)
जो डुप्लिकेट को हटा देगा .... अभी भी इस तर्क को आजमा रहा है - अपेक्षित आउटपुट नहीं मिल रहा है