Finden Sie das nächste Datum in SQL Server
Ich habe eine Tabelle dbo.X
mit DateTime
column Y
die haben Hunderte von Datensätzen.
Meine Gespeicherte Prozedur parameter @CurrentDate
, ich möchte, um herauszufinden, das Datum in der column Y
im obigen Tabelle dbo.X
das ist weniger als und am nächsten @CurrentDate.
Wie es zu finden?
InformationsquelleAutor der Frage MaxRecursion | 2012-12-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der where-Klausel entsprechen alle Zeilen mit Datum weniger als @CurrentDate, und da sind Sie bestellt descendantly, TOP 1, am nächsten Datum auf das aktuelle Datum.
InformationsquelleAutor der Antwort ederbf
Verwenden DateDiff und bestellen Sie Ihr Ergebnis, um wie viele Tage oder Sekunden sind, die zwischen diesem Datum und was war der Eingang
Sowas
InformationsquelleAutor der Antwort Mikey Mouse
Habe ich eine bessere Lösung für dieses problem, denke ich.
Zeige ich ein paar Bilder zu unterstützen und zu erklären, die endgültige Lösung.
Hintergrund
In meiner Lösung habe ich eine Tabelle von Wechselkursen. Diese repräsentieren Markt-Sätze für verschiedene Währungen. Jedoch, unser service-provider hat ein problem mit der feed rate und als solcher einige Preise haben null-Werte. Ich möchte füllen Sie die fehlenden Daten mit den Preisen für die gleiche Währung, wie in der nächsten Zeit zu der fehlenden rate. Im Grunde möchte ich, um die RateId für den nächsten nicht-null-rate, die ich dann ersetzen. (Dies ist nicht gezeigt, hier in meinem Beispiel.)
1) So zu starten, die ermöglicht die Identifizierung des fehlenden Preise Informationen:
Abfrage zeigt meine fehlende Tarife haben also eine rate-Wert von null
2) als Nächstes identifizieren können Preise, die nicht fehlen.
Abfrage zeigt Preise, die nicht fehlen
3) Diese Abfrage ist, wo die Magie passiert. Habe ich gemacht, hier eine Annahme, die entfernt werden können, wurde aber Hinzugefügt, zur Verbesserung der Effizienz/Leistung der Abfrage. Die Annahme in Zeile 26 ist, dass ich erwarte, Ersatz zu finden, die Transaktion am selben Tag wie die fehlende /null-Transaktion.
Die Magie passiert ist Zeile 23: Die Row_Number-Funktion fügt ein auto-Nummer, beginnend mit 1 für die kürzeste Zeitdifferenz zwischen fehlenden und nicht fehlenden Transaktion. Die nächstgelegene Transaktion hat ein rownum 2 usw.
Bitte beachten Sie, dass in Zeile 25 muss ich anschließen die Währungen so, dass ich nicht die Diskrepanz der Währung Typen. Das heißt, dass ich nicht wollen, zu ersetzen, eine Währung AUD CHF-Werte. Ich will die nächsten passenden Währungen.
Die Kombination der beiden Daten-sets mit einer row_number zu identifizieren, die nächste Transaktion
4) Schließlich können die Daten, wo die RowNum 1
Die Letzte Abfrage
Die Abfrage vollständige Abfrage lautet wie folgt;
InformationsquelleAutor der Antwort Craig Gers
InformationsquelleAutor der Antwort user1583384