Обновите значения DATETIME до <= GETDATE()-1

Я ищу, чтобы обновить существующие DATETIME значения до вчерашней даты и предыдущего в зависимости от их DATE порядок, но держать TIME часть как есть.

Например, если предположить, что сегодняшняя дата 2013-05-15 14:19:50и у меня есть два существующих 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

1 ответ

Решение

Я думаю, что это работает вместо вашего нынешнего UPDATE, Является ли это лучше или нет, является спорным:

update #Date set DateTime =
     DATEADD(day,
        (select MIN(DATEDIFF(day,DateTime,CURRENT_TIMESTAMP)) from #Date) --How many days since the most recent event recorded?
        -1, --Make that most recent event yesterday
     DateTime)

Простое наблюдение состоит в том, что количество дней, добавляемых к каждому событию, является постоянным - это просто количество дней с самого последнего события до сегодняшнего дня.

Другие вопросы по тегам