按增量删除列冗余

时间:2012-07-26 14:29:43

标签: sql sql-server sql-server-2008 tsql sqlite

我有下表:

enter image description here

如您所见,我有重复的日期和时间值,如2012-01-01 09:29:00.000和2012-01-01 09:29:00.008。

我需要你的帮助,通过在重复的小时内添加毫秒来消除冗余,并获得以下结果:

enter image description here

所以我创建了一个表TableSource,我尝试插入新的输出值而没有redondonce但是我还没有成功。

我认为以下查询可以解决问题,但它只适用于My-sql:

INSERT INTO TableDestination
SELECT * FROM TableSource
    ON DUPLICATE KEY
UPDATE  NeededDateRow = DATEADD(millisecond,1 , NeededDateRow)

2 个答案:

答案 0 :(得分:1)

您可以使用:

    DECLARE @table table (id int, dt datetime)
DECLARE @table2 table (id int, dt datetime)
INSERT INTO @table 
SELECT 1, '2012/01/01'
UNION
SELECT 2, '2012/01/01'
UNION
SELECT 3, '2012/01/01'
UNION
SELECT 1, '2012/01/02'

SELECT * , DATEADD(millisecond, 10 * (ROW_NUMBER() OVER (PARTITION BY dt ORDER BY dt) - 1), dt) As NewDate
FROM @table 

INSERT INTO @table2
SELECT ID, DATEADD(millisecond, 10 * (ROW_NUMBER() OVER (PARTITION BY dt ORDER BY dt) - 1)  , dt) FROM @table 

SELECT * from @table2 

答案 1 :(得分:0)

MSSQL中没有等效的INSERT ... ON DUPLICATE KEY,但是, MERGE WHEN NOT MATCHED 可能适合您。

您可以参考this answer

我刚刚草拟了sql语法(未经测试)

MERGE TableDestination AS T
USING TableSource AS S
ON (T.NeededDateRow = S.NeededDateRow)
WHEN NOT MATCHED
    THEN INSERT (NeededDateRow) VALUES (DateAdd(millisecond,1,NeededDateRow))