Aggregate and reset data in high frequency table

I can't seem to find anything even remotely regarding this topic though I'm sure something must exist.

I'm working with a table that is updated at a reasonably high frequency, the table has thousands of records, each being updated around 2-3 times per second. It contains signaling data (let's call it "usage data" for the sake of simplicity).

I want to aggregate the data in the "usage" column and then reset the value in each record.

My "Device Usage" and "Aggregated Usage" tables would look something similar to this sample:

SET XACT_ABORT, NOCOUNT ON;
GO

IF ( OBJECT_ID( N'[dbo].[DeviceUsage]' ) IS NOT Null )
    DROP TABLE [dbo].[DeviceUsage];
IF ( OBJECT_ID( N'[dbo].[AggregatedUsage]' ) IS NOT Null )
    DROP TABLE [dbo].[AggregatedUsage];
GO

-- Device Usage Table.
CREATE TABLE [dbo].[DeviceUsage]
(
    [Device]        uniqueidentifier NOT NULL,      -- Name of the device we're tracking.
    [Heartbeat]     datetimeoffset(4) NOT NULL      -- Date / time of the last update to the record.
        DEFAULT SYSDATETIMEOFFSET(),
    [Usage]         bigint NOT NULL                 -- Usage count of the specific device.
        DEFAULT 0,
    PRIMARY KEY CLUSTERED
    (
        [Device] ASC
    )
);

-- Aggregated Usage Table.
CREATE TABLE [dbo].[AggregatedUsage]
(
    [Date]          date NOT NULL                   -- Date being recorded.
        DEFAULT SYSDATETIMEOFFSET(),
    [Usage]         bigint NOT NULL                 -- Aggregated usage.
        DEFAULT 0,
    PRIMARY KEY CLUSTERED
    (
        [Date] ASC
    )
);

A working sample of how records would be updated would look something like this:

SET XACT_ABORT, NOCOUNT ON;
GO

-- Insert device record.
DECLARE @Device uniqueidentifier = NEWID();
INSERT INTO [dbo].[DeviceUsage] ( [Device] )
SELECT @Device;

-- Device usage increment.
DECLARE @Counter int = 0;

WHILE @Counter < 1000000
BEGIN
    BEGIN TRANSACTION;

    UPDATE [dbo].[DeviceUsage]
    SET [Heartbeat] = SYSDATETIMEOFFSET()
    , [Usage] += 1
    WHERE [Device] = @Device;

    COMMIT TRANSACTION;

    SET @Counter += 1;
END

And finally I expect the aggregation function to look something akin to this:

SET XACT_ABORT, NOCOUNT ON;
GO

BEGIN TRANSACTION;

-- Collect the aggregated use.
MERGE INTO [dbo].[AggregatedUsage] target
USING
(
    SELECT CONVERT( date, SYSDATETIMEOFFSET() ), SUM( [Usage] )
    FROM [dbo].[DeviceUsage]
) AS source ( [Date], [Usage] )
ON ( target.[Date] = source.[Date] )
WHEN MATCHED THEN UPDATE
    SET [Usage] += source.[Usage]
WHEN NOT MATCHED THEN INSERT
    ( [Date], [Usage] )
    VALUES ( source.[Date], source.[Usage] );

-- Reset usage.
UPDATE [dbo].[DeviceUsage]
SET [Usage] = 0;

COMMIT TRANSACTION;

SELECT * FROM [dbo].[AggregatedUsage];
SELECT * FROM [dbo].[DeviceUsage];

I'm hoping to confirm whether this is a solid foundation for building out a design like this or whether there is a better way to do it, especially with regards to record locks, etc. I believe I have correctly defined the transactions but I'd appreciate any comments regarding my design.

Much appreciated.