Question

J'ai une table qui ressemble à ceci:

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

Je dois créer une table qui a tous la marque Dates dans une colonne et la différence entre chaque côté Date de marque lorsqu'ils sont triés dans une autre colonne. C'est le SQL que j'ai écrit:

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

Cependant, cette SQL ne rejoindra pas le week-end 5/5/2008 -> 5/2/2008 par exemple, ou le week-end long. Comment puis-je obtenir la table à l'auto sur les dates non d'inscription contiguës? Merci pour toute l'aide!

Était-ce utile?

La solution

La seule façon de le faire est d'utiliser ROW_NUMBER (et ROW_NUMBER + 1) sur une sélection ordonnée par date pour un SQL qui prend en charge les numéros de ligne ou de créer une table temporaire avec une touche d'incrémentation automatique que vous remplissez pour la date.

Il n'y a pas d'autre moyen sans avoir recours à une solution non-jointure (qui est une boucle.)

Autres conseils

Vous pouvez essayer d'utiliser ROW_NUMBER lors de la sélection et à se joindre à cet ordre par la date.

EDIT. Fait avec des jointures.

Ce que vous pouvez faire est de se joindre à la table elle-même, à des dates plus grande que cette ligne, puis groupe par et sélectionnez le min.

Quelque chose comme ceci

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

Je sais que c'est Sql code serveur, mais peut facilement être changé pour MS Access.

Cela devrait retourner le 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top