Tsql T-SQL(平均值)每10行

Tsql T-SQL(平均值)每10行,tsql,select,average,Tsql,Select,Average,我的T-SQL数据库中有以下表格: 在此查询中,我有以下示例记录: 现在我有更多的条目 我有一个疑问: SELECT 'ECG' AS NOME, V.TIMESTAMP as ORA, CAST(V.Valore AS DECIMAL(21,20)) AS VALORE, row_number() over (order by V.TIMESTAMP) AS CONTEGGIO, V.ID AS ID_VALORE

我的T-SQL数据库中有以下表格:

在此查询中,我有以下示例记录:

现在我有更多的条目

我有一个疑问:

SELECT 'ECG' AS NOME,
        V.TIMESTAMP as ORA, 
        CAST(V.Valore AS DECIMAL(21,20)) AS VALORE, 
        row_number() over (order by V.TIMESTAMP) AS CONTEGGIO, 
        V.ID AS ID_VALORE
        FROM AA_V_CARTELLA_CLINICA_VALORI_ECG V
        ORDER BY V.TIMESTAMP asc

此查询提取所有数据,我想将其更改为提取数据,但每10个值对列“Valore”进行平均。有可能吗?

@bircastri我希望我能很好地理解你,但我认为你很接近。您需要的是基于CONTEGGIO创建一个组bucket,这样它们就属于一个包含10个值(模)的bucket,并找到其平均值。请参见下面的模型:

DECLARE @AA_V_CARTELLA_CLINICA_VALORI_ECG TABLE (Id INT, VALORE REAL, TIMESTAMP  datetime)
INSERT INTO @AA_V_CARTELLA_CLINICA_VALORI_ECG
SELECT 31853, 0.049, '2018-08-02 10:14:42.837' UNION ALL
SELECT 31854, 0.157, '2018-08-02 10:14:43.837' UNION ALL
SELECT 31855, 0.151, '2018-08-02 10:14:44.837' UNION ALL
SELECT 31856, 0.055, '2018-08-02 10:14:45.837' UNION ALL
SELECT 31857, 0.035, '2018-08-02 10:14:46.837' UNION ALL
SELECT 31858, -0.013, '2018-08-02 10:14:47.837' UNION ALL
SELECT 31859, -0.004, '2018-08-02 10:14:48.837' UNION ALL
SELECT 31860, -0.035, '2018-08-02 10:14:49.837' UNION ALL
SELECT 31861, -0.0032, '2018-08-02 10:14:50.837' UNION ALL
SELECT 31862, -0.031, '2018-08-02 10:14:51.837' UNION ALL
SELECT 31863, 0.049, '2018-08-02 10:14:52.837' UNION ALL
SELECT 31864, 0.053, '2018-08-02 10:14:53.837' UNION ALL
SELECT 31865, 0.061, '2018-08-02 10:14:54.837'







;WITH P AS(
SELECT 'ECG' AS NOME,
        V.TIMESTAMP  as ORA, 
        CAST(V.Valore AS DECIMAL(21,20)) AS VALORE, 
        row_number() over (order by V.TIMESTAMP ) AS CONTEGGIO, 
        V.ID AS ID_VALORE
        FROM @AA_V_CARTELLA_CLINICA_VALORI_ECG V
        --ORDER BY V.timestampc asc

)



SELECT  
    *, 
    GroupID=(CONTEGGIO - 1) / 10, 
    AVVALORE=AVG(VALORE) OVER ( PARTITION BY (CONTEGGIO - 1) / 10)
FROM P

如果您想要移动平均,请使用下面的查询

SELECT *, AVG(VALORE) OVER (ORDER BY TIMESTAMP ROWS 10 PRECEDING) AS MovingAvg
FROM @AA_V_CARTELLA_CLINICA_VALORI_ECG

是否希望每10行移动平均值?如果我尝试执行您的查询,我会出现以下错误:“行”附近的语法不正确。@bircastri,per,自2008年起应该支持它。支持Yes OVER子句,但语法我认为不正确。我已在我的SQL SERVER 2017本地运行它。@bircastri,请参阅修改后的版本。我已经添加了所有其他列。