2022-02-11 10:31:23 +00:00

45 lines
1.0 KiB
PL/PgSQL

CREATE PROCEDURE [dbo].[SetBucketProcesses]
(
@DebugMode BIT = 0
)
AS
BEGIN
DELETE FROM [dbo].[BucketToProcessMap]
;WITH maxBuckets AS
(
SELECT MAX([BucketId]) AS 'MaxBucket' FROM [dbo].[Buckets]
)
INSERT INTO [dbo].[BucketToProcessMap]
SELECT
CASE
WHEN (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] = 0 THEN maxBuckets.[MaxBucket]
ELSE (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket]
END AS 'NewBucketId',
p.[ProcessId]
FROM
[dbo].[BucketProcesses] p
CROSS JOIN maxBuckets
IF @DebugMode = 1
BEGIN
;WITH maxBuckets AS
(
SELECT MAX([BucketId]) AS 'MaxBucket' FROM [dbo].[Buckets]
)
SELECT
CASE
WHEN (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] = 0 THEN maxBuckets.[MaxBucket]
ELSE (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket]
END AS 'NewBucketId',
p.*
FROM
[dbo].[BucketProcesses] p
CROSS JOIN maxBuckets
END
END