Frage

Ich habe eine Tabelle, dass sieht wie folgt aus:

Code    Mark Date   Notional
Beta    5/1/2008    $1,102,451.00
Beta    5/2/2008    $1,102,451.00
Beta    5/5/2008    $1,102,451.00
Beta    5/6/2008    $1,102,451.00

Ich brauche eine Tabelle zu erstellen, die mit allen von Mark Daten in einer Spalte und die Differenz zwischen jedem benachbarten Mark Datum hat, wenn sie in einer anderen Spalte sortieren. Dies ist die SQL ich geschrieben habe:

SELECT 
    Current.[Mark Date],
    Prev.[Mark Date],
    (DATEDIFF("d", Prev.[Mark Date], Current.[Mark Date])/365)

FROM Notional as Prev, Notional as Current
WHERE (Prev.[Mark Date] = (Current.[Mark Date]-1));

Allerdings wird diese SQL kommt nicht über das Wochenende 5/5/2008 -> 2008.05.02 zum Beispiel oder an langen Wochenenden. Wie würde ich mich über den Tisch zu bekommen, um sich selbst gegenüber nicht zusammenhängenden Terminen teilnehmen? Vielen Dank für alle Hilfe!

War es hilfreich?

Lösung

Der einzige Weg, dies zu tun ist ROW_NUMBER zu verwenden (und ROW_NUMBER + 1) auf einem von Datum für eine SQL bestellt auszuwählen, die Stütze Zeilennummern oder eine temporäre Tabelle mit einem Autoinkrement Schlüssel zu erstellen, die Sie in chronologischer Reihenfolge zu füllen.

Es gibt keine andere Art und Weise zu einer nicht beitreten Lösung ohne Rückgriff (die eine Schleife ist.)

Andere Tipps

Sie können versuchen, zu verwenden ROW_NUMBER bei der Auswahl und kommen auf dieser Reihenfolge nach dem Datum.

EDIT. Fertig mit beitritt.

Was Sie tun können, ist die Tabelle mit sich selbst zu verbinden, zu Terminen größer als dieser Reihe, und dann die Gruppe durch und die min wählen.

So etwas

DECLARE @Table TABLE(
        DateVal DATETIME
)

INSERT INTO @Table SELECT '01 May 2009'
INSERT INTO @Table SELECT '02 May 2009'
INSERT INTO @Table SELECT '05 May 2009'
INSERT INTO @Table SELECT '06 May 2009'

SELECT  t.DateVal,
        MIN(tNext.DateVal) NextDate
FROM    @Table t LEFT JOIN
        @Table tNext ON t.DateVal < tNext.DateVal
GROUP BY t.DateVal

Ich weiß, das ist SQL Server-Code, kann aber leicht auf MS Access geändert werden.

Dies sollte Rückkehr der Folowing:

StartDate                  EndDate
2009-05-01 00:00:00.000 2009-05-02 00:00:00.000
2009-05-02 00:00:00.000 2009-05-05 00:00:00.000
2009-05-05 00:00:00.000 2009-05-06 00:00:00.000
2009-05-06 00:00:00.000 NULL
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top