Torna al Thread

USE tempdb; GO -- xx Creo la tabella xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CREATE TABLE #T1 ( [Id] int NOT NULL IDENTITY (1, 1) PRIMARY KEY, [DaOr] datetime NOT NULL, [Note] varchar(50) NULL ) ON [PRIMARY] GO -- xx Inserisco i dati xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx SET IDENTITY_INSERT #T1 ON GO INSERT #T1 ([Id], [DaOr], [Note]) VALUES (1, N'2015-02-02T13:05:00', N'04 Deve Restare'), (2, N'2015-02-02T11:10:00', N'03 Deve Restare'), (3, N'2015-02-02T12:00:00', N'Elimina'), (9, N'2015-12-10T15:32:00', N'Elimina'), (10, N'2015-12-10T15:00:00', N'06 Deve Restare'), (11, N'2015-12-10T16:52:00', N'07 Deve Restare'), (12, N'2015-12-12T23:00:30', N'08 Deve Restare'), (13, N'2015-06-04T22:00:00', N'05 Deve Restare'), (14, N'2015-02-02T10:40:40', N'Elimina'), (15, N'2015-01-02T14:00:08', N'01 Deve Restare'), (16, N'2015-02-02T10:00:00', N'02 Deve Restare'); GO SET IDENTITY_INSERT #T1 OFF GO -- xx mostro i dati prima della routine xxxxxxxxxxxxxxxxxxxxxx SELECT [Id], [DaOr], [Note] FROM #T1 ORDER BY [DaOr]; GO -- ***************************************************************************** -- xx La Procedura vera e propria xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -- 3600 La approssimazione in secondi per ritenere gli orari duplicati ( 1 ora ) DECLARE @Appx as int SET @Appx = 3600 -- la OldDate di Base assunta per il 1° record, deve essere la minimissima ammissibile in modo che il 1° record sia sempre mantenuto DECLARE @Base AS Datetime SET @Base = (SELECT Min(DaOr) FROM #T1) SET @Base = DATEADD(s, -(@Appx+1000), @Base) -- print @Base --dichiaro le variabili da leggere nel cursore DECLARE @Idxx AS int DECLARE @OlDa AS datetime DECLARE @NwDa AS datetime DECLARE Curs CURSOR FOR SELECT [Id], [DaOr] FROM #T1 ORDER BY [DaOr] OPEN Curs FETCH NEXT FROM Curs INTO @Idxx, @NwDa SET @OlDa = @Base WHILE @@FETCH_STATUS = 0 BEGIN IF @NwDa > DATEADD(s, @Appx, @OlDa) BEGIN -- print CAST(@OlDa AS varchar) + ' ' + CAST(@NwDa AS varchar) + ' mantieni ' + CAST((DATEADD(s, @Appx, @OlDa)) AS varchar) + ' ' + CAST(@Idxx AS varchar) SET @OlDa = @NwDa END ELSE BEGIN -- print CAST(@OlDa AS varchar) + ' ' + CAST(@NwDa AS varchar) + ' elimina ' + CAST((DATEADD(s, @Appx, @OlDa)) AS varchar) + ' ' + CAST(@Idxx AS varchar) DELETE FROM #T1 WHERE Id=@Idxx END FETCH NEXT FROM Curs INTO @Idxx, @NwDa END CLOSE Curs DEALLOCATE Curs -- xx Fine della procedura xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -- ***************************************************************************************** -- xx mostro i dati dopo la routine xxxxxxxxxxxxxxxxxxxxxx SELECT [Id], [DaOr], [Note] FROM #T1 ORDER BY [DaOr]; GO -- xx faccio pulizia nel tempdb xxxxxxxxxxxxxxxxxxxxxxxxxxxxx DROP TABLE #T1; GO -- xx Finito
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5