我有一个表,如下所示:

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

我需要创建在另一列进行排序时具有所有在一列中,并且每个相邻标记日期之间的差的马克日期的表。这是我写的SQL:

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

然而,这SQL不会在周末5/5/2008参加过 - > 2008年5月2日例如或长周末。我将如何去获取表自参加对非连续的日期?感谢所有帮助!

有帮助吗?

解决方案

要做到这一点的唯一方法是在选择按日期排序,使用ROW_NUMBER(和ROW_NUMBER + 1)的SQL支持行号或创建一个临时表与您按照日期顺序填充一个自动增量键。

有是不诉诸于非加入溶液没有其他的方法(这是一个循环。)

其他提示

您可以在选择时尽量使用ROW_NUMBER,并参加由该日期顺序。

EDIT。完成与联接。

你可以做的是加入表本身,对过时的莫过于该行做大,然后按,然后选择分钟。

像这样

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

我知道这是SQL Server代码,但可以很容易地被改变到MS Access。

此应返回如下因素:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top