順序DATETIME
に応じて、既存の値を昨日の日付と以前の日付に更新しようとしていますが、パーツはそのままにしておきます。DATE
TIME
たとえば、今日の日付が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