मेरे पास एक टेबल नाम "कच्चा" है। दिनांक कॉलम में महीने की सभी तिथियां नहीं हैं क्योंकि यह छुट्टियों को रिकॉर्ड नहीं करता है या जब दिन के लिए कोई बिक्री नहीं होती है। मैं डेटा फॉर्म को विशिष्ट तिथि या अधिकतम तिथि के एक दिन से कम की तारीख प्राप्त करने की कोशिश कर रहा हूं लेकिन यह खोज को वापस नहीं कर रहा है क्योंकि अधिकतम तिथि छुट्टी थी। ये हैं तिथियां: 2021-07-09 2021-07-07 2021-07-03 2021-07-02 2021-07-01 2021-06-30

SELECT *
    FROM raw
    WHERE date=(SELECT MAX(date) - 1 FROM raw);

or

SELECT *
FROM raw
WHERE date=(SELECT MAX(date) - interval 1 day FROM raw);

    \begin{table}[]
\begin{tabular}{lll}
Name  & Date       & Sales \\
ACC   & 2020-07-09 & 2000  \\
BEL   & 2020-07-09 & 200   \\
Dabur & 2020-07-09 & 600   \\
ACC   & 2020-07-07 & 450   \\
GMR   & 2020-07-07 & 12    \\
ACC   & 2020-07-03 & 450   \\
ITC   & 2020-07-03 & 45    \\
Dabur & 2020-07-03 & 350   \\
GMR   & 2020-07-03 & 450   \\
BEL   & 2020-06-30 & 500   \\
GTL   & 2020-06-30 & 850   \\
Dabur & 2020-06-30 & 100   \\
ACC   & 2020-06-27 & 50    \\
Dabur & 2020-06-27 & 125  
\end{tabular}
\end{table}
0
Avi 9 जुलाई 2021, 11:38

4 जवाब

सबसे बढ़िया उत्तर

यदि आप किसी विशिष्ट तिथि से एक दिन पहले का डेटा चाहते हैं, तो इसका उपयोग करें:

SELECT r.*
FROM raw r
WHERE r.date = (SELECT MAX(r2.date) FROM raw r2 WHERE r2.date < ?);

? विशिष्ट तिथि है।

अधिकतम तिथि से पहले की तारीख के लिए, आप इसका उपयोग कर सकते हैं:

SELECT r.*
FROM raw r
WHERE r.date = (SELECT MAX(r2.date)
                FROM raw r2
                WHERE r2.date < (SELECT MAX(r2.date) FROM raw r3)
               );

आउच। उपश्रेणियों के दो स्तर। यह बोझिल लगता है। एक आसान तरीका है:

SELECT r.*
FROM raw r
WHERE r.date = (SELECT DISTINCT r2.date
                FROM raw r2
                ORDER BY r2.DATE DESC
                LIMIT 1 OFFSET 1
               );
2
Gordon Linoff 9 जुलाई 2021, 11:09

TheWinterCoder द्वारा पोस्ट की गई क्वेरी पूरी तरह से काम करनी चाहिए यदि आप ऑर्डर को क्लॉज द्वारा बदलते हैं

rank() over ( order by date desc) date_rank

हालाँकि, अगर वह किसी तरह काम नहीं करता है, तो आप नीचे दिए गए प्रश्न का प्रयास कर सकते हैं -

SELECT *
    FROM raw
    WHERE date = (SELECT MAX(date)
                    FROM raw
                   WHERE date < (SELECT MAX(date) FROM raw));
1
Ankit Bajpai 9 जुलाई 2021, 10:42

चूंकि आपकी तिथियों में विराम हैं, इसलिए आप अधिकतम तिथि से केवल 1 घटा नहीं सकते। आपको तारीखों को रैंक करना होगा और फिर शीर्ष दो रैंकों का चयन करना होगा।

इससे मदद मिलनी चाहिए और आपकी क्वेरी कुछ इस तरह दिखेगी :

with order_dates AS(
      Select *,
             dense_rank() over ( order by date desc) date_rank
      from raw
)
select *
from order_dates
where date_rank <=2  
1
TheWinterCoder 9 जुलाई 2021, 12:37

निम्नलिखित तालिका में दूसरी सबसे हाल की तारीख लौटाएगा:

SELECT date
FROM raw
GROUP BY date
ORDER BY date DESC
LIMIT 1, 1

किसी विशिष्ट तिथि से कम के लिए:

SELECT date
FROM raw
WHERE date < '2020-07-09'
ORDER BY date DESC
LIMIT 0, 1

उप-क्वेरी के रूप में उपरोक्त क्वेरी का प्रयोग करें।

0
Salman A 9 जुलाई 2021, 11:41