我的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”进行平均。可以做到吗?
答案 0 :(得分:1)
@bircastri我希望我能很好地理解您,但我认为您非常亲密。您需要基于CONTEGGIO创建一个组存储桶,以便它们属于10个值(模)的存储桶,然后求出平均值。看到下面的模型:
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
答案 1 :(得分:0)
如果要移动平均线,请使用以下查询。
SELECT *, AVG(VALORE) OVER (ORDER BY TIMESTAMP ROWS 10 PRECEDING) AS MovingAvg
FROM @AA_V_CARTELLA_CLINICA_VALORI_ECG