2016-11-30 15 views
5

का उपयोग किए बिना एसक्यूएल में रिकॉर्ड मैं इस तरह एक प्रश्न है:दिखाएँ पिछले 5 desc

SELECT TOP 5 
    CONVERT(varchar(15), CAST(Pout AS time), 100) AS 'OUT', 
    CONVERT(varchar(15), CAST(pIn AS time), 100) AS 'IN', 
    DATEDIFF(MINUTE, CONVERT(varchar(5), Pout, 108), CONVERT(varchar(5), pIn, 108)) AS [Total Used] 
FROM 
    loginfo 
WHERE 
    empid = 1001 
    AND CONVERT(date, pDate) = '28/Nov/2016 2:45:00 PM' 
    AND pOut IS NOT NULL 
ORDER BY 
    pOut 

इस क्वेरी ठीक काम कर रहा है, लेकिन मैं शीर्ष 5 रिकॉर्ड दिखाते हैं नहीं करना चाहती, मैं हाल ही में दिखाने की जरूरत है 5 रिकॉर्ड, मेरा मतलब है कि पिछले 5 रिकॉर्ड हैं, लेकिन मैं ORDER BY pout DESC नहीं कर सकता, क्योंकि मैं सही प्रारूप में रिपोर्ट दिखाना चाहता हूं, लेकिन मुझे अवरोही क्रम

उदाहरण के बिना मेरे लेनदेन के केवल पिछले 5 रिकॉर्ड दिखाना होगा उदाहरण के लिए यदि मेरे पास 10 रिकॉर्ड हैं लेनदेन, मैं सही प्रारूप में केवल पिछले 5 रिकॉर्ड दिखाना चाहता हूं

+2

क्या आप हमें बता सकते हैं कि आप 'desc' क्यों नहीं चाहते हैं? – jarlh

+0

क्या आप कह रहे हैं, आप 'ऑर्डर बाय' का उपयोग करेंगे, लेकिन 'desc' (͠◉_◉᷅) – Vikrant

+0

नहीं, अब मैं देखता हूं। एक व्युत्पन्न तालिका में उतरो, फिर इसके परिणाम का पता लगाएं। – jarlh

उत्तर

5

उपयोग ROW_NUMBER() बजाय:

SELECT * FROM (
    SELECT 
      CONVERT(varchar(15), CAST(Pout AS time), 100) AS [OUT], 
      CONVERT(varchar(15), CAST(pIn AS time), 100) AS [IN], 
      DATEDIFF(MINUTE, CONVERT(varchar(5), Pout, 108),  
      CONVERT(varchar(5), pIn, 108)) AS [Total Used], 
      ROW_NUMBER() OVER(ORDER BY pOut DESC) as rnk 
    FROM loginfo 
    WHERE empid = 1001 
     AND CONVERT(date, pDate) = '28/Nov/2016 2:45:00 PM' 
     AND pOut IS NOT NULL) p 
WHERE p.rnk <= 5 
ORDER BY What_Ever_You_Want 

या, वैकल्पिक रूप से, एक व्युत्पन्न तालिका का उपयोग करें:

SELECT * FROM (Your Current Query) 
ORDER BY pOut ; 
+2

महोदय, यह काम करता है .. मैं फिर से जांच करूँगा और पुष्टि करता हूं .. धन्यवाद – user3262364

+0

बहुत धन्यवाद, यह मेरे लिए ठीक काम करता है – user3262364

+0

एनबी: यह ओवर क्लॉज –

0

आप ROW_NUMBER उपयोग कर सकते हैं लेकिन वहां भी आप इसके साथ एक DESC उपयोग करना होगा।

; WITH CTE AS 
(
    SELECT 
    CONVERT(varchar(15), CAST(Pout AS time), 100) AS 'OUT', 
    CONVERT(varchar(15), CAST(pIn AS time), 100) AS 'IN', 
    DATEDIFF(MINUTE, CONVERT(varchar(5), Pout, 108), CONVERT(varchar(5), pIn, 108)) AS [Total Used], 
    ROW_NUMBER() OVER(ORDER BY pOut DESC) AS RN 
    FROM loginfo 
    WHERE empid = 1001 
    AND CONVERT(date, pDate) = '28/Nov/2016 2:45:00 PM' 
    AND pOut IS NOT NULL 
) SELECT * FROM CTE 
WHERE RN BETWEEN 1 AND 5 
ORDER BY OUT 
+0

मुझे नहीं पता कि यह कैसे काम करेगा। आप 'ROW_NUMBER()' कॉलम का उपयोग कहां कर रहे हैं? – sagi

+1

क्षमा करें, मैंने गलती से इसे मिटा दिया जबकि नोटपैड से कॉपी और पेस्ट करें :)। अभी अपडेट किया गया – Esty

संबंधित मुद्दे