Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Максимальные значения интервалов  [new]
AlphaSpec
Member

Откуда:
Сообщений: 15
Доброго времени суток! Имеется таблица вида
-----------------------------------------
| id | time | value |
-----------------------------------------
| 1 | 2015-12-11 08:00:00 | 0,00 |
| 2 | 2015-12-11 08:00:01 | 0,50 |
| 3 | 2015-12-11 08:00:10 | 5,20 |
| 4 | 2015-12-11 08:00:15 | 5,00 |
| 5 | 2015-12-11 08:00:17 | 6,00 |
| 6 | 2015-12-11 08:00:21 | 4,00 |
| 7 | 2015-12-11 08:00:25 | 0,50 |
| 8 | 2015-12-11 08:00:32 | 0,20 |
| 9 | 2015-12-11 08:15:10 | 0,50 |
| 10 | 2015-12-11 08:15:15 | 7,00 |
| 11 | 2015-12-11 08:15:20 | 0,50 |
| 12 | 2015-12-11 08:15:30 | 0,30 |
| 13 | 2015-12-11 08:25:00 | 0,70 |
| 14 | 2015-12-11 08:25:10 | 4,50 |
| 15 | 2015-12-11 08:25:15 | 4,00 |
| 16 | 2015-12-11 08:25:20 | 5,00 |
| 17 | 2015-12-11 08:25:25 | 0,10 |
| 18 | 2015-12-11 08:25:25 | 0,30 |
| 19 | 2015-12-11 08:25:25 | 0,10 |

В значения пишется ампераж с прибора. Мне необходимо сформировать запрос, который выберет максимальные значения в каждом интервале скачка ампеража (условно считаем скачком - значения выше 0,5). То есть запрос должен вернуть таблицу вида

| 5 | 2015-12-11 08:00:17 | 6,00 |
| 10 | 2015-12-11 08:15:15 | 7,00 |
| 16 | 2015-12-11 08:25:20 | 5,00 |

Заранее благодарен за помощь.
11 дек 15, 07:50    [18544068]     Ответить | Цитировать Сообщить модератору
 Re: Максимальные значения интервалов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
если вы в поле поиск по форуму впечатаете название темы - то получите 1к вариантов решения задачи
11 дек 15, 10:24    [18544719]     Ответить | Цитировать Сообщить модератору
 Re: Максимальные значения интервалов  [new]
aleks2
Guest
Maxx
если вы в поле поиск по форуму впечатаете название темы - то получите 1к вариантов решения задачи


Не, не найдет. Поганая задача.
1. Найти все id значений меньших или равных 0.5 - точки минимумов.
2. Точки минимумов преобразовать в интервалы id "от - до"
3. Join с интервалами и группировка по интервалам.
11 дек 15, 10:35    [18544769]     Ответить | Цитировать Сообщить модератору
 Re: Максимальные значения интервалов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
aleks2,

ну вот алгоритм уже нашел....
если без изысков - то решаеться довольно просто
11 дек 15, 10:39    [18544792]     Ответить | Цитировать Сообщить модератору
 Re: Максимальные значения интервалов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
+
declare @t table (id int, [time] datetime, value numeric(18,2));

insert into @t
values
(1, '20151211 08:00:00', 0.00),
(2, '20151211 08:00:01', 0.50),
(3, '20151211 08:00:10', 5.20),
(4, '20151211 08:00:15', 5.00),
(5, '20151211 08:00:17', 6.00),
(6, '20151211 08:00:21', 4.00),
(7, '20151211 08:00:25', 0.50),
(8, '20151211 08:00:32', 0.20),
(9, '20151211 08:15:10', 0.50),
(10, '20151211 08:15:15', 7.00),
(11, '20151211 08:15:20', 0.50),
(12, '20151211 08:15:30', 0.30),
(13, '20151211 08:25:00', 0.70),
(14, '20151211 08:25:10', 4.50),
(15, '20151211 08:25:15', 4.00),
(16, '20151211 08:25:20', 5.00),
(17, '20151211 08:25:25', 0.10),
(18, '20151211 08:25:25', 0.30),
(19, '20151211 08:25:25', 0.10);

with a as
(
 select
  t.id, t.[time], t.[value], a.f,
  row_number() over (order by t.[time]) - row_number() over (partition by a.f order by t.[time]) as g
 from
  @t t cross apply
  (select case when value > 0.5 then 1 else 0 end) a(f)
),
b as
(
 select
  a.id, a.[time], a.[value],
  row_number() over (partition by a.g order by a.value desc) as rn
 from
  a
 where
  a.f = 1
)
select
 b.id, b.[time], b.[value]
from
 b
where
 b.rn = 1
order by
 b.[time];
11 дек 15, 11:10    [18544944]     Ответить | Цитировать Сообщить модератору
 Re: Максимальные значения интервалов  [new]
AlphaSpec
Member

Откуда:
Сообщений: 15
invm, aleks2, огромная благодарность!
11 дек 15, 11:29    [18545070]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить