2013-04-22 7 views
5

Ho una tabella in SQL Server che contiene dati organizzati da BusinessDataDate. BusinessDataDate è un solo Date (nessun componente orario) e viene popolato solo nei giorni lavorativi. per esempio. non nei fine settimana o nei giorni festivi.Qual è il modo migliore per trovare la data "next but one latest" in SQL?

Perché non c'è nessun ordine specifico per questo, voglio trovare il date before the current max date

Questa query funziona, e posso impostare i valori in variabili locali - ma ci si sente come se ci deve essere un modo più pulito?

SELECT MAX(BusinessDataDate) FROM myTable 
    WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 

Ogni data avrà più righe nella tabella - il numero esatto non è prevedibile.

+2

L'approccio è corretto. L'aggiunta di una clausola where a main e subquery da filtrare solo negli ultimi x giorni potrebbe migliorare le prestazioni. –

+0

Potrei provare che ... tuttavia, lavorare in Medio Oriente è un po 'vago da indovinare. Eid può essere 3-6 giorni, e se coincide con i fine settimana, allora in modo affettivo potresti avere un intervallo di 10 giorni. – BlueChippy

risposta

2

Simile alla query originale ma che ne dici di utilizzare il primo 1?

SELECT Top 1 BusinessDataDate 
FROM myTable 
WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 
ORDER BY BusinessDataDate DESC 
+0

Avrai bisogno di ORDINA per query esterna –

+0

Ben individuato! Modificato. – Ric

+0

Come è meglio? Ciò richiederà l'ordinamento e la ricerca originale non lo farà. – Aryadev

3
SELECT TOP (1) 
    BusinessDataDate 
FROM 
    (
    SELECT 
     BusinessDataDate, 
     DENSE_RANK() OVER (ORDER BY BusinessDataDate DESC) as rn 
    FROM 
     myTable 
    ) x 
WHERE 
    x.rn = 2 
ORDER BY 
    x.BusinessDataDate; 
+0

Nome colonna non valido 'x'. – BlueChippy

+0

Dovrebbe aver detto - ci sono più righe nella tabella - il numero esatto di righe differisce per data. – BlueChippy

+0

@BlueChippy: specifica quindi, non downvotare. Facilmente risolto se ** avessimo saputo ** – gbn

Problemi correlati