1

タイトルはわかりにくいかもしれませんが、私がやろうとしていることは例で非常に理解しやすいです。次のようなテーブルがあります。

Code         Date_           Ratio

73245   Jan  1 1975 12:00AM    10
73245   Apr 18 2006 12:00AM    4
73245   Dec 26 2007 12:00AM    10
73245   Jan 30 2009 12:00AM    4
73245   Apr 21 2011 12:00AM    2

基本的に、証券ごとに、その比率が有効になり始める日付とともに、その比率が示されます。このテーブルは、開始日だけでなく、次のように開始日と終了日のペアがあれば、はるかに使いやすくなります。

Code             StartDate_         EndDate_               Ratio
73245     Jan  1 1975 12:00AM   Apr 18 2006 12:00AM         10
73245     Apr 18 2006 12:00AM   Dec 26 2007 12:00AM          4
73245     Dec 26 2007 12:00AM   Jan 30 2009 12:00AM         10
73245     Jan 30 2009 12:00AM   Apr 21 2011 12:00AM          4
73245     Apr 21 2011 12:00AM   Dce 31 2049 12:00AM(or some random date in far future)           2

SQL ステートメントを使用して元のテーブルを目的のテーブルに変換するにはどうすればよいですか? 私はSQLの経験がほとんどなく、その方法がわかりませんでした。

助けてください!ありがとう!

4

2 に答える 2

2

SQL Server 2012 の場合:

SELECT  code,
        date_ AS startDate,
        LEAD(date_) OVER (PARTITION BY code ORDER BY date_) AS endDate,
        ratio
FROM    mytable

SQL Server 2005 および 2008 の場合:

WITH    q AS
        (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY code ORDER BY date_) AS rn
        FROM    mytable
        )
SELECT  q1.code, q1.date_ AS startDate, q2.date_ AS endDate, q1.ratio
FROM    q q1
LEFT JOIN
        q q2
ON      q2.code = q1.code
        AND q2.rn = q1.rn + 1
于 2013-09-25T20:27:42.960 に答える