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

Откуда:
Сообщений: 127
Добрый день
Определить времена начала и окончания превышения заданного значения в данном примере превышение числа 4

2011-01-07 00:15:30.000 4.041514
2011-01-07 00:34:00.000 4.200244
2011-01-07 00:37:30.000 5.054945
2011-01-07 00:46:30.000 4.175824
2011-01-07 00:49:30.000 4.554335
2011-01-07 00:50:00.000 4.249084
2011-01-07 01:13:00.000 4.041514
2011-01-07 01:13:30.000 4.273504
2011-01-07 01:15:30.000 4.175824
2011-01-07 01:35:00.000 4.029304
2011-01-07 01:49:00.000 4.945055
2011-01-07 02:36:30.000 4.151404
2011-01-07 04:49:30.000 5.274725
2011-01-07 04:50:30.000 4.664225
10 авг 11, 13:09    [11097187]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А можно другой билет?
10 авг 11, 13:10    [11097202]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
это практика с которой я редко сталкиваюсь в своей работе
10 авг 11, 13:19    [11097289]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
trace2003
это практика с которой я редко сталкиваюсь в своей работе
Тогда может быть вы свой вопрос оформите согласно рекомендациям? Со скриптами и желаемым результатом?

Сообщение было отредактировано: 10 авг 11, 13:20
10 авг 11, 13:20    [11097300]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
т.е результат обработки таблицы должен быть в виде пар дат - 2011-01-07 00:37 и 2011-01-07 04:49:30
10 авг 11, 13:21    [11097309]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
trace2003
т.е результат обработки таблицы должен быть в виде пар дат - 2011-01-07 00:37 и 2011-01-07 04:49:30
Т.е. 4.664225 меньше 4?

Сообщение было отредактировано: 10 авг 11, 13:28
10 авг 11, 13:28    [11097401]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
Гавриленко Сергей Алексеевич,

протупил.
вот
Добрый день
Необходимо определить времена начала и окончания превышения заданного значения в данном примере превышение числа 4

F1        F2
00:15   4.04
00:34   4.20
00:37   5.05
00:46   5.17
00:49   5.55
00:50   5.24
01:13   5.04
01:13   5.27
01:15   5.17
01:35   5.02
01:49   5.94
02:36   5.15
04:49   5.27
04:50   4.66



результат обработки таблицы должен быть в виде пар дат - 00:37 и 04:49 ; и т.д.
10 авг 11, 13:41    [11097540]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
йачетвёрко йапревышено
Guest
trace2003
Гавриленко Сергей Алексеевич,

протупил.
вот
Добрый день
Необходимо определить времена начала и окончания превышения заданного значения в данном примере превышение числа 4

F1        F2
00:15   4.04
00:34   4.20
00:37   5.05
00:46   5.17
00:49   5.55
00:50   5.24
01:13   5.04
01:13   5.27
01:15   5.17
01:35   5.02
01:49   5.94
02:36   5.15
04:49   5.27
04:50   4.66



результат обработки таблицы должен быть в виде пар дат - 00:37 и 04:49 ; и т.д.


превышают 5 наверно?

как можно определить, относятся ли значения к одному интервалу? найти непрерывные последовательности превышений?
пронумеруйте интервалы и сделайте GROUP BY по номеру.
10 авг 11, 14:08    [11097818]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
да превышают 5, можно ли пример кода? я не знаю как это сделать
10 авг 11, 14:42    [11098151]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
trace2003
да превышают 5, можно ли пример кода? я не знаю как это сделать


-- Это должны были сделать вы.
DECLARE @tbl TABLE (f1 VARCHAR(10), f2 DECIMAL(10,2))

INSERT INTO @tbl(f1,f2)
SELECT
'00:15',   4.04 UNION ALL SELECT
'00:34',   4.20 UNION ALL SELECT
'00:37',   5.05 UNION ALL SELECT
'00:46',   5.17 UNION ALL SELECT
'00:49',   5.55 UNION ALL SELECT
'00:50',   5.24 UNION ALL SELECT
'01:13',   5.04 UNION ALL SELECT
'01:13',   5.27 UNION ALL SELECT
'01:15',   5.17 UNION ALL SELECT
'01:35',   5.02 UNION ALL SELECT
'01:49',   5.94 UNION ALL SELECT
'02:36',   5.15 UNION ALL SELECT
'04:49',   5.27 UNION ALL SELECT
'04:50',   4.66

продолжение следует...
10 авг 11, 14:47    [11098193]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
йачетвёрко йапревышено
Guest
trace2003
да превышают 5, можно ли пример кода? я не знаю как это сделать


я вам задавал наводящие вопросы. забудьте о коде, решите задачу на словах.
есть 10 строк (или сколько там в примере). мы находимся на первой строке, до нее никаких строк не было, значит это новый интервал. это интервал в котором было превышение или интервал с "корректными" значениями?
сохраняем знания о первой строке. мы теперь знаем, что начался какой-то интервал (превышение или непревышения).

переходим на вторую строку. превышение/нет? если не совпадает с предыдущим значением, то можно сказать что предыдущий интервал закончился и начался новый?

когда мы поняли что интервал сменился - увеличиваем его номер на 1, если не сменился - просто переходим к следующей строке.

родите алгоритм в мозгу и потом самым примитивным способом которым сможете реализуйте в коде, присылайте что получится.
начните с четырех строк: первая - не превышение, вторая и третья - превышение, четвертая - не превышение.
10 авг 11, 14:53    [11098238]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
SELECT MIN(f1) mnf1, MAX(f1) mxf1
        FROM (
SELECT  ROW_NUMBER() OVER ( ORDER BY f1 ) rn1,
        ROW_NUMBER() OVER ( ORDER BY CASE WHEN f2 > 5 THEN 0
                                          ELSE 1
                                     END ) rn2,
        CASE WHEN f2 > 5 THEN 0
             ELSE 1
        END f,
        f1,
        f2
FROM    @tbl
) t
WHERE t.f = 0
GROUP BY t.rn1-t.rn2
10 авг 11, 14:54    [11098242]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
йачетвёрко йапревышено
Guest
kDnZP
SELECT MIN(f1) mnf1, MAX(f1) mxf1
        FROM (
SELECT  ROW_NUMBER() OVER ( ORDER BY f1 ) rn1,
        ROW_NUMBER() OVER ( ORDER BY CASE WHEN f2 > 5 THEN 0
                                          ELSE 1
                                     END ) rn2,
        CASE WHEN f2 > 5 THEN 0
             ELSE 1
        END f,
        f1,
        f2
FROM    @tbl
) t
WHERE t.f = 0
GROUP BY t.rn1-t.rn2


дайте шанс самому додуматься :)
10 авг 11, 14:56    [11098265]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
йачетвёрко йапревышено, я на сегодня лимит по бездельникам выполнил)))). Так что больше не буду.
10 авг 11, 14:58    [11098296]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
при выполнении в реальной таблице выводит одинаковы пары дат 00:02:30 - 00:02:30 т.е фиксируется каждое превышение
10 авг 11, 15:10    [11098391]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
хотя пример работает четко на табличке @tbl
10 авг 11, 15:14    [11098430]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
trace2003
при выполнении в реальной таблице выводит одинаковы пары дат 00:02:30 - 00:02:30 т.е фиксируется каждое превышение

Хрустальный шар подсказывает - значит что-то не работает))). И не работает оно где-то там...
10 авг 11, 15:28    [11098557]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
может кто может помочь? пожалуйста
10 авг 11, 20:33    [11100430]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
iljy
Member

Откуда:
Сообщений: 8711
trace2003
может кто может помочь? пожалуйста

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

Откуда:
Сообщений: 127
F1 F3
01.05.2011 0:00 2.185592
01.05.2011 0:00 5.115995
01.05.2011 0:01 4.200244
01.05.2011 0:01 4.114774
01.05.2011 0:02 2.515263
01.05.2011 0:02 3.333333
01.05.2011 0:03 3.087912
01.05.2011 0:03 3.174603
01.05.2011 0:04 2.295482
01.05.2011 0:04 1.990232
01.05.2011 0:05 2.087912
01.05.2011 0:05 1.929182
01.05.2011 0:06 1.721612
01.05.2011 0:06 1.587302
01.05.2011 0:07 1.587302
01.05.2011 0:07 1.843712
01.05.2011 0:08 2.832723
01.05.2011 0:08 1.843712
01.05.2011 0:09 1.526252
01.05.2011 0:09 2.222222
01.05.2011 0:10 1.868132
01.05.2011 0:10 2.039072
01.05.2011 0:11 1.575092
01.05.2011 0:11 2.234432
01.05.2011 0:12 2.173382
01.05.2011 0:12 1.770452
01.05.2011 0:13 2.429792
01.05.2011 0:13 2.454212
01.05.2011 0:14 1.550672
01.05.2011 0:14 1.599512
01.05.2011 0:15 1.868132
01.05.2011 0:15 4.041514
01.05.2011 0:16 2.100122
01.05.2011 0:16 1.733822
01.05.2011 0:17 2.539683
01.05.2011 0:17 2.173382
01.05.2011 0:18 2.869353
01.05.2011 0:18 2.466423
01.05.2011 0:19 1.953602
01.05.2011 0:19 2.673993
01.05.2011 0:20 2.759463
01.05.2011 0:20 3.028083
01.05.2011 0:21 1.672772
01.05.2011 0:21 2.771673
01.05.2011 0:22 2.222222
01.05.2011 0:22 2.783883
01.05.2011 0:23 2.380952
01.05.2011 0:23 3.919414
01.05.2011 0:24 3.625153
01.05.2011 0:24 2.490843
01.05.2011 0:25 2.539683
01.05.2011 0:25 1.855922
01.05.2011 0:26 1.794872
01.05.2011 0:26 3.760684
01.05.2011 0:27 3.380952
01.05.2011 0:27 3.235653
01.05.2011 0:28 2.185592
01.05.2011 0:28 2.954823
01.05.2011 0:29 1.721612
01.05.2011 0:29 1.636142
01.05.2011 0:30 1.807082
01.05.2011 0:30 2.600733
01.05.2011 0:31 1.721612



SELECT MIN([F1]) начало, MAX([F1]) конец
        FROM (
SELECT  ROW_NUMBER() OVER ( ORDER BY [F1] ) rn1,
        ROW_NUMBER() OVER ( ORDER BY CASE WHEN [F3] > 3 THEN 0
                                          ELSE 1
                                     END ) rn2,
        CASE WHEN [F3]> 3 THEN 0
             ELSE 1
        END f,
        [F1],
        [F3]
FROM    [3SQL].[dbo].[Results]
) t
WHERE t.f = 0
GROUP BY t.rn1 - t.rn2
10 авг 11, 21:16    [11100546]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
iljy
Member

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

вы издеваетесь чтоли? Вам же показали, в каком виде надо данные приводить.
10 авг 11, 21:20    [11100557]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
iljy
Member

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

ну и по существу - надо заранее оговаривать, что у вас время может быть одинаковым. И что кстати делать, если в один и тот же момент было значение, превышающее N, и не превышающее? Это разбивает интервал или нет?
10 авг 11, 21:30    [11100574]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
iljy
Member

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

ну и наконец по коду: там некорректно вычисляется rn2 - не учитывается собственно дата при задании порядка. А в случае, как у вас, допустимости повторения дат, надо еще учитывать само значение, чтобы сортировка была однозначной. Либо использовать DENSE_RANK, если интервал не должен разбиваться.
10 авг 11, 21:36    [11100585]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
iljy
trace2003,

ну и наконец по коду: там некорректно вычисляется rn2 - не учитывается собственно дата при задании порядка. А в случае, как у вас, допустимости повторения дат, надо еще учитывать само значение, чтобы сортировка была однозначной. Либо использовать DENSE_RANK, если интервал не должен разбиваться.


дат одинаковых нет, там секунды разные.
10 авг 11, 21:40    [11100590]     Ответить | Цитировать Сообщить модератору
 Re: Определить времена начала и окончания превышения заданого занчения  [new]
trace2003
Member

Откуда:
Сообщений: 127
trace2003
iljy
trace2003,

ну и наконец по коду: там некорректно вычисляется rn2 - не учитывается собственно дата при задании порядка. А в случае, как у вас, допустимости повторения дат, надо еще учитывать само значение, чтобы сортировка была однозначной. Либо использовать DENSE_RANK, если интервал не должен разбиваться.


дат одинаковых нет, там секунды разные.

нулевая и 30я секунда каждой минуты
10 авг 11, 21:40    [11100591]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить