SELEZIONARE FONDO senza cambiare l’ORDINE DA

Sono nuovo di SQL e vi chiedete è possibile selezionare la parte inferiore di n righe senza l’utilizzo di SELECT TOP e poi ORDER BY.

Posso trovare numerosi esempi di mimicing l’idea con SELECT TOP & poi ORDER BY ad esempio Come selezionare più basso righe? ma ho bisogno di tenere i miei dati ordinati in ordine inverso, in modo che utilizza ORDER BY non è l’ideale.

Mio sotto query restituisce i dati dei punti che ho bisogno di passare attraverso i miei altri programmi, ma ora i dati provengono ordinati in direzione opposta a quella desiderata e causa problemi.

SELECT TOP 504 
date
,price

FROM
[dbo].[AssetRet]

WHERE
asset = 'SP500'

ORDER BY
date DESC

Ho potuto ottenere intorno a questo mettendo un filtro date a rimuovere TOP ma io non sono sicuro di come fare questo, cioè:

WHERE
date > Min(Select DISTINCT TOP 504 date FROM [dbo].[AssetRet] ORDER BY date DESC)

Spero che sia possibile tramite SQL per SELECT BOTTOM senza ORDER BY; altro devo capovolgere i dati dopo la query SQL in un altro programma

 

2 Replies
  1. 1

    Si potrebbe avvolgere in un’altra query e inserire nell’ordine in cui si richiedono…

    SELECT x.* 
    FROM   (
           SELECT TOP 504 
                  "date",
                  price
           FROM   [dbo].[AssetRet]
           WHERE  asset = 'SP500'
           ORDER BY "date" DESC
           ) x 
    ORDER BY x."date"

    Fa questo lavoro alternativo?…avrete bisogno di una versione successiva di sql-server per la funzione di partizione RANK

    SELECT x."date",
           x.price
    FROM   (
           SELECT "date",
                  price,
                  Rnk = RANK() OVER (ORDER BY "date" DESC)
           FROM  [dbo].[AssetRet]
           WHERE asset = 'SP500'
           ) x 
    WHERE  x.Rnk <= 504
    ORDER BY x."date" 

    MODIFICA

    Sembra questa è un’altra risposta praticamente coperto tua domanda

    • La prima query avvolgere lavorato a trattare. Grazie mille
    • Nessun problema, contento di aver potuto aiutare – quale versione di sql-server stai usando? Fatto il secondo suggerimento non funziona?
    • Il secondo suggerimento ha funzionato perfettamente, grazie…. primo suggerimento che mi sembra un po ‘ più facile da implementare
  2. 2

    Non posso capire pienamente quello che stai dopo, ma è possibile utilizzare ROW_NUMBER() in posizione di alto/basso, si può utilizzare per ottenere sia la parte SUPERIORE e INFERIORE se si voleva:

    SELECT date, price
    FROM (SELECT     date
                   , price
                   , ROW_NUMBER() OVER (ORDER BY date ASC) 'RowRankASC'
                   , ROW_NUMBER() OVER (ORDER BY date DESC) 'RowRankDESC'
            FROM AssetRet
            WHERE asset = 'SP500'
         )sub
    WHERE RowRankASC <= 504
         OR RowRankDESC <= 504
    ORDER BY date
    • +1 …. pensa che siamo abbastanza d’accordo!

Lascia un commento