2016-11-30 80 views
5

我有這樣的查詢:顯示最近5個記錄在SQL不使用遞減

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

你是說,你會使用'order by'而不是'desc'(͠◉_◉᷅) – Vikrant

+0

現在我明白了。在派生表中執行desc,然後將其結果作爲結果。 – 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

NB:它使用DESC在超過子句 –

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