2016-11-30 2 views
5

Ich habe eine Abfrage wie folgt aus:anzeigen letzten 5 Einträge in SQL ohne DESC mit

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 

Diese Abfrage funktioniert prima, aber ich will nicht Top-5-Aufzeichnungen zeigen, muss ich kürzlich zeigen, 5 Datensätze, ich meine letzten 5 Datensätze, aber ich kann nicht zu ORDER BY pout DESC, weil ich Bericht im richtigen Format anzeigen möchte, aber ich muss nur die letzten 5 Datensätze meiner Transaktion ohne absteigend Reihenfolge

Beispiel zeigen, wenn ich Datensätze 10 habe Transaktion, ich möchte nur die letzten 5 Datensätze im richtigen Format anzeigen

+2

Können Sie uns sagen, warum Sie 'desc' nicht wollen? – jarlh

+0

Willst du sagen, du wirst 'Order by' verwenden, aber nicht' desc' (͠◉_◉᷅) – Vikrant

+0

Jetzt sehe ich. Führen Sie in einer abgeleiteten Tabelle eine Beschreibung aus, und geben Sie dann asc als Ergebnis an. – jarlh

Antwort

5

Verwenden ROW_NUMBER() statt:

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 

Oder alternativ verwenden, um eine abgeleitete Tabelle:

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

sir ,, es scheint funktioniert ..i wlill überprüfen Sie noch einmal und bestätigen ..dank – user3262364

+0

vielen dank, es funktionierte gut für mich – user3262364

+0

nb: es verwendet DESC in der over-Klausel –

0

Sie ROW_NUMBER verwenden können, aber auch müssen Sie eine DESC mit verwenden.

; 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

Ich sehe nicht, wie das geht. Wo benutzt du die 'ROW_NUMBER()' Spalte? – sagi

+1

Sorry, ich habe es beim Kopieren und Einfügen aus dem Editor versehentlich gelöscht :). Jetzt aktualisiert – Esty

Verwandte Themen