Domanda

Ho una tabella che assomiglia a questo:

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

Ho bisogno di creare una tabella che ha tutte le Mark date in una colonna e la differenza tra ogni adiacenti Mark Data in cui ordinati in un'altra colonna. Questa è la SQL ho scritto:

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

Tuttavia, questo SQL non si unirà durante il fine settimana 5/5/2008 -> 5/2/2008 per esempio, o su ponti. Come potrei fare per ottenere la tabella per sé unirsi oltre le date non contigue? Grazie per tutto l'aiuto!

È stato utile?

Soluzione

L'unico modo per farlo è quello di utilizzare ROW_NUMBER (e ROW_NUMBER + 1) su una selezione in ordine di data per uno SQL che supporta i numeri di riga o per creare una tabella temporanea con una chiave di incremento automatico, che si popola in ordine di data.

Non c'è altro modo senza ricorrere a un non-join soluzione (che è un loop).

Altri suggerimenti

Si può provare a utilizzare ROW_NUMBER al momento della selezione e di unirsi a questo ordine entro la data.

EDIT. Fatto con join.

Che cosa si può fare è quello di partecipare al tavolo a se stesso, in date più grande di quella riga, e poi GROUP BY e selezionare il min.

Qualcosa di simile a questo

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

So che questo è il codice di SQL Server, ma può essere facilmente modificato a MS Access.

Questo dovrebbe restituire il 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top