1

順序DATETIMEに応じて、既存の値を昨日の日付と以前の日付に更新しようとしていますが、パーツはそのままにしておきます。DATETIME

たとえば、今日の日付が2013-05-15 14:19:50であると仮定すると、 と の 2 つの既存のDATETIME値が2013-01-04 01:25:45あり2013-01-03 01:08:33ます。プログラムで と に更新したいと思い2013-05-14 01:25:45ます2013-05-13 01:08:33

誰かがこれを行うためのより良い方法を持っていますか?

私の試み

IF EXISTS
        (
        SELECT  1 
        FROM    tempdb..sysobjects 
        WHERE   id = object_id ('tempdb..#Date') 
        AND     xtype = 'U'
        )

        DROP TABLE #Date

CREATE
TABLE   #Date
        (
        ID          INT IDENTITY(1,1) PRIMARY KEY CLUSTERED(ID),
        [DateTime]  DATETIME
        )

INSERT
INTO    #Date
        (
        [DateTime]
        )

VALUES  ('2012-12-31 01:25:45')
        ,('2012-12-31 01:25:44')
        ,('2012-12-31 01:25:44')
        ,('2012-12-30 01:08:34')
        ,('2012-12-30 01:08:33')
        ,('2012-12-30 01:08:33')
        ,('2012-12-29 00:43:01')
        ,('2012-12-29 00:43:00')
        ,('2012-12-29 00:43:00')
        ,('2012-12-28 00:25:07')
        ,('2012-12-28 00:25:07')
        ,('2012-12-28 00:25:07')


SELECT  *
FROM    #Date   


;WITH   CTE
AS  (
    SELECT  DENSE_RANK() OVER (ORDER BY CONVERT(DATE,[DateTime]) DESC) AS DENSERANK,
            [DateTime]
    FROM    #Date
    )

UPDATE  CTE
SET     [DateTime] = DATEADD(DAY,DATEDIFF(DAY,[DateTime],GETDATE()-DENSERANK),[DateTime])       


SELECT  *
FROM    #Date
4

1 に答える 1