sql - डीबी 2 में दो कॉलम के बीच अधिकतम नल योग्य तिथि ढूंढना




db2 (3)

एक UNION क्वेरी का उपयोग करने के बारे में कैसे:

SELECT MAX(t.newDate)
FROM
(
    SELECT date1 AS newDate
    FROM myTable
    UNION
    SELECT date2 AS newDate
    FROM myTable
) t

एक अन्य विकल्प:

SELECT CASE WHEN t.date1 > t.date2 THEN t.date1 ELSE t.date2 END
FROM
(
    SELECT (SELECT MAX(date1) FROM myTable) AS date1,
           (SELECT MAX(date2) FROM myTable) AS date2
    FROM SYSIBM.SYSDUMMY1
) t

मेरे पास एक टेबल है जिसमें डीबी 2 बुलाया जाता है myTable

इसमें कई स्तंभ हैं:

a |  b    | date1        |  date2
---------------------------------------------
1    abc     <null>        2014-09-02
2    aax     2015-12-30    2016-09-02
2    bax     2015-10-20    <null>
2    ayx     2014-12-10    2016-02-12

जैसा कि ऊपर के मूल्यों से देखा गया है, date2 date1 और date1 में null मूल्य भी हो सकते हैं।

मैं दोनों date2 की अधिकतम और date1 date2 कैसे प्राप्त कर सकता हूं?

अर्थात क्वेरी का उत्पादन 2016-09-02 होना चाहिए क्योंकि तारीख date1 और तारीख 2 में मौजूद सभी दिनांकों की अधिकतम तारीख है।

मैं डीबी 2-9 का उपयोग कर रहा हूं

पढ़ने के लिए धन्यवाद!


MAX() एक दिलचस्प जानवर है ...

यह एक स्केलर फ़ंक्शन और कुल मिलाकर दोनों के रूप में उपलब्ध है।

तो आप सभी को वास्तव में जरूरत है

select max(max(coalesce(date1,'0001-01-01')
              ,coalesce(date2,'0001-01-01') 
              )
          )
from mytable

बाहरी MAX() कुल संस्करण है, आंतरिक स्केलर एक है


संक्षिप्त जवाब यह है: आप इसे नहीं कर सकते हैं।

टी-एसक्यूएल से, नेस्टेड संग्रहीत प्रक्रिया कॉल के कई परिणामों तक पहुंचने का कोई तरीका नहीं है, संग्रहीत प्रक्रिया को बदले बिना दूसरों ने सुझाव दिया है।

पूरा होने के लिए, यदि प्रक्रिया एक परिणाम लौट रही थी, तो आप इसे निम्न वाक्यविन्यास के साथ एक temp तालिका या तालिका चर में डाल सकते हैं:

INSERT INTO #Table (...columns...)
EXEC MySproc ...parameters...

आप एक प्रक्रिया के लिए एक ही वाक्यविन्यास का उपयोग कर सकते हैं जो कई परिणाम देता है, लेकिन यह केवल पहले परिणाम को संसाधित करेगा, शेष को त्याग दिया जाएगा।





sql db2