2011-12-21 15 views

उत्तर

17
SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) 
       FROM Table 
       WHERE Date < (SELECT MAX(Date) 
           FROM Table 
          ) 
      ) ; 

या:

SELECT TOP (1) * 
FROM Table 
WHERE Date < (SELECT MAX(Date) 
       FROM Table 
      ) 
ORDER BY Date DESC ; 

या:

SELECT * 
FROM 
    (SELECT t.* 
     , ROW_NUMBER() OVER(ORDER BY Date DESC) AS RowNumber 
    FROM Table t 
) AS tmp 
WHERE RowNumber = 2 ; 

Date स्तंभ अद्वितीय मान हैं तो उन तीनों प्रश्नों ही परिणाम प्राप्त होगा। यदि कॉलम में डुप्लिकेट तिथियां हो सकती हैं, तो वे अलग-अलग परिणाम दे सकते हैं (जब पहले या दूसरे स्थान पर संबंध होते हैं)। यदि दूसरी जगह में संबंध हैं तो पहली क्वेरी परिणाम में कई पंक्तियां भी देगी।

+0

यदि वे तिथियां समान हैं, तो वे सभी दो रिकॉर्ड लौट रहे हैं, इसके लिए कोई समाधान? –

+0

दूसरी और तीसरी क्वेरी हमेशा 1 रिकॉर्ड या कोई नहीं लौटाएगी। –

+0

तो, यह इस बात पर निर्भर करता है कि आप संबंधों से कैसे निपटना चाहते हैं। जब आप सभी पंक्तियों की समान तिथियां होती हैं तो आप वापस क्या चाहते हैं? –

7
"select TOP (1) * 
from Table 
WHERE Date<(SELECT MAX(Date) FROM Table) 
ORDER BY Date DESC" 

चाल चलाना चाहिए।

+0

आदेश की कोशिश करो और यह होगा: सीमा को छोड़कर डी एसक्यूएल 2008 में नहीं है ... लेकिन शीर्ष है। – xQbert

+3

'LIMIT' खंड SQL सर्वर में समर्थित नहीं है। इसके बजाय 'TOP' का उपयोग करें। http://msdn.microsoft.com/en-us/library/ms189463.aspx –

+0

हाँ, संकेत के लिए धन्यवाद! मैंने इसे संपादित किया है। – Quasdunk

1

कृपया यह कोड जांचें।

SELECT * FROM category WHERE Created_Time <(SELECT MAX(Created_Time) FROM category) ORDER BY Created_Time DESC LIMIT 1 

प्रसाद। एसक्यूएल में

+1

'LIMIT' ** SQL सर्वर में काम नहीं करता ** यह MySQL वाक्यविन्यास –

+0

ओह क्षमा करें। मेरी गलती। मैंने नहीं देखा कि कौन सा एसक्यूएल सर्वर है। इसे ध्यान में रखने के लिए धन्यवाद। –

1

का चयन दूसरे की अंतिम तिथि:

SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2 and YourDateColumn < 
(SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2) 

आशा किसी को मदद मिलती है।

0

तारीख उतरते द्वारा इस

SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) FROM Table 
      WHERE Date < (SELECT MAX(Date) FROM Table) 
     ) ; 
संबंधित मुद्दे