Pregunta

Tengo una tabla que es similar al siguiente:

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

Es necesario crear una tabla que tiene todas las fechas Marcos, en una columna y la diferencia entre cada marca Fecha adyacente cuando ordenados en otra columna. Este es el SQL que he escrito:

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));

Sin embargo, esto no va a unirse a SQL el fin de semana 5/5/2008 -> 5/2/2008 por ejemplo, o los fines de semana largos. ¿Cómo hago para conseguir la mesa para unirse a la auto fechas sobre los no contiguos? Gracias por toda la ayuda!

¿Fue útil?

Solución

La única manera de hacer esto es utilizar ROW_NUMBER (y ROW_NUMBER + 1) en un selecto clasificadas por fecha para una consulta SQL que los números soportes fila o para crear una tabla temporal con una clave de incremento automático que se rellenan en orden cronológico.

No hay otra manera sin recurrir a una solución no unirse (que es un bucle.)

Otros consejos

Se puede tratar de utilización ROW_NUMBER al seleccionar y unirse en ese orden por la fecha.

Editar. Hecho con uniones.

Lo que puede hacer es unirse a la mesa a sí mismo, en fechas más grande que esa fila, y luego por grupo y seleccione el min.

Algo como esto

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

Sé que esto es el código SQL Server, pero se puede cambiar fácilmente a MS Access.

Esto debería devolver el 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top