2
我有一个数据集并希望显示它,但它可能非常巨大(数千个点),我想过滤它们。例如,此处输出的点数为1000+: 非均匀分布式数据集的NTILE替代方案
现在我使用NTILE获得近似值,但如果点不是均匀分布的,则它不起作用。而我得到这个输出(NTILE与参数100):
我怎样才能避免这种情况? SQL存储过程如下:
ALTER PROCEDURE [dbo].[usp_GetSystemHealthCheckData]
@DateFrom datetime,
@DateTo datetime,
@EstimatedPointCount int
with recompile
AS
BEGIN
SET NOCOUNT ON;
set arithabort on
if @DateFrom IS NULL
RAISERROR ('@DateFrom cannot be NULL', 16, 1)
if @DateTo IS NULL
RAISERROR ('@DateTo cannot be NULL', 16, 1)
if @EstimatedPointCount IS NULL
RAISERROR ('@EstimatedPointCount cannot be NULL', 16, 1)
;With T as
(
SELECT *, GroupId = NTILE(@EstimatedPointCount) over (order by GeneratedOnUtc)
FROM SystemHealthCheckData
WHERE GeneratedOnUtc between @DateFrom AND @DateTo
)
SELECT CpuPercentPayload = AVG(CpuPercentPayload),
FreeRamMb = AVG(FreeRamMb),
FreeDriveMb = AVG(FreeDriveMb),
GeneratedOnUtc = CAST(AVG(CAST(GeneratedOnUtc AS DECIMAL(18, 6))) AS DATETIME)
FROM T
GROUP BY GroupId
END
是的,这是关于一个滑动平均水平,但问题是我不知道应该分多少是分组。例如“我们应该从4月1日到6月1日获得100分,表明动态”。数据集有113个点。这里需要像Bresenham的线算法这样的算法来插入这个数据集。 –
@AlexZhukovskiy,你可以先计算一个“滑动偏差”,并在你的前后价值中加入一种因子。因此,您可以动态缩小这个重音动作的间隔......请投票并或标记为已接受,如果有帮助,thx! – Shnugo
我upvoted,但没有标记为答案呢:也许会有另一个。 –