2016-05-18 2 views
0

У меня есть таблица со временем (столбец) и мощность (столбец). Я хочу, чтобы вычислить различные наборы результатов по следующим данным таблицы:sql запрос для запуска. Среднее, минимальное, максимальное, общее, стандартное отклонение, подсчет за каждые 5 минут

Мой Стол:

[timestamp]       [power] 

2016-01-06 13:32:27     1 
2016-01-06 13:33:27     2 
2016-01-06 13:34:27     3 
2016-01-06 13:35:27     4 
2016-01-06 13:36:27     5 
2016-01-06 13:37:27     6 
2016-01-06 13:38:27     7 
2016-01-06 13:39:27     8 
2016-01-06 13:40:27     9 
2016-01-06 13:41:27     10 

Всего, как:

[timestamp]       [power]    Total 

2016-01-06 13:32:27     1     1 
2016-01-06 13:33:27     2     3 
2016-01-06 13:34:27     3     6 
2016-01-06 13:35:27     4     10 
2016-01-06 13:36:27     5     15 
2016-01-06 13:37:27     6     21 
2016-01-06 13:38:27     7     28 
2016-01-06 13:39:27     8     36 
2016-01-06 13:40:27     9     45 
2016-01-06 13:41:27     10     55 

Всего за каждые 5 минут, как:

[timestamp]       [power]    Total_every_5minutes 

--2016-01-06 13:32:27     1     1 
--2016-01-06 13:33:27     2     3 
--2016-01-06 13:34:27     3     6 
--2016-01-06 13:35:27     4     10 
2016-01-06 13:36:27     5     15 
--2016-01-06 13:37:27     6     21 
--2016-01-06 13:38:27     7     28 
--2016-01-06 13:39:27     8     36 
2016-01-06 13:40:27     9     45 

Аналогично, я хочу рассчитать среднее, минимальное, максимальное, стандартное отклонение, & count. На данный момент я написал запрос, который добавит столбец с,

Обратите внимание: Что я не должен писать хранимую процедуру. Поскольку у меня есть приложение Windows, в котором пользователь выбирает базу данных, и он будет перечислять таблицы, из перечисленных таблиц пользователь выбирает столбцы и в определенном столбце, который он будет устанавливать для вычисления общего количества или т. Д. После выбора запрос строится. и запрос выполнит и привяжет результаты к datagridview.

IF OBJECT_ID('tempdb..#mytemptable') IS NOT NULL DROP TABLE #mytemptable; 
SELECT SUM(CAST ([power] AS bigint) ) AS power_TOTAL INTO #MYTEMPTABLE 
    FROM (SELECT t1.[timestamp], t1.[power] FROM [REPORT] t1) TEMPTABLE 
SELECT t1.[timestamp], t1.[power], RM_temp.* FROM [REPORT] t1 , #MYTEMPTABLE RM_temp; 
+0

Это поможет: http://stackoverflow.com/a/9814970 –

+0

также обеспечивают структуру и данные. –

+0

Я предоставил данные, извините, не получил вас – Tan

ответ

0

может быть это будет работать для Вас, основываясь на данных

DECLARE @Table1 TABLE 
    (timestamp varchar(19), power int) 
; 

INSERT INTO @Table1 
    (timestamp , power) 
VALUES 
    ('2016-01-06 13:32:27', 1), 
    ('2016-01-06 13:33:27', 2), 
    ('2016-01-06 13:34:27', 3), 
    ('2016-01-06 13:35:27', 4), 
    ('2016-01-06 13:36:27', 5), 
    ('2016-01-06 13:37:27', 6), 
    ('2016-01-06 13:38:27', 7), 
    ('2016-01-06 13:39:27', 8), 
    ('2016-01-06 13:40:27', 9), 
    ('2016-01-06 13:41:27', 10) 
; 


Select [timestamp],[power] from (
SELECT timestamp, power , RunningTotal = power + COALESCE(
(
    SELECT SUM(power) 
    FROM @Table1 AS i 
    WHERE i.timestamp < o.timestamp), 0 
) 
FROM @Table1 AS o)TT where exists (Select * from (select power * 5 ID from @Table1) T WHERE T.id = TT.RunningTotal) 
ORDER BY timestamp; 
Смежные вопросы