質問
私はテーブルを持っている次のようになります:
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
私は別の列でソートするとき1列目のマーク日付と隣接する各マーク日の間の差のすべてを持つテーブルを作成する必要があります。これは私が書いた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));
例えばまたは長い週末に> 2008年5月2日 - しかし、このSQLは週末2008年5月5日を超える参加しないだろう。どのように私は自分にテーブルを取得しに行くか非連続的な日付の上に参加しますか?すべての助けをありがとう!
解決
これを行うための唯一の方法は、選択SQLことを支持行番号を日付順または日付順に移入自動インクリメントキーで一時テーブルを作成する上でROW_NUMBER(およびROW_NUMBER + 1)を使用することです。
他の方法は、非参加溶液に頼らずに存在しない(ループである。)
他のヒント
あなたが選択する際に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に変更することができます。
このは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
所属していません StackOverflow