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

Откуда:
Сообщений: 127
Добрый день, есть кусок таблицы вида
a1	a2
32	10681.39
32	10651.95
32	10618.33
32	10594.82
0	10587.96
0	10578.16
16	10568.47
18	10563.19
18	10557.68
18	10551.25
18	10542.13
18	10535.062

как можно фиксировать первое значение а2 при каждом появлении в таблице а1 = 32
23 ноя 11, 13:47    [11644204]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Что есть - "фиксировать первое значение а2 при каждом появлении в таблице а1 = 32"?
23 ноя 11, 13:57    [11644337]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ТС, без правила сортировки вы ничего не добьётесь.
у вас есть ключевое поле?
23 ноя 11, 13:59    [11644365]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
aleks2
Guest
"Но тут примчались санитары и зафиксировали нас..." (с) В.Высоцкий

Вы как из этой самой больницы сбежали. Куды фиксировать?
23 ноя 11, 13:59    [11644369]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
fabulaspb
Member

Откуда: Санкт-Петербург
Сообщений: 34
Если я правильно понял, при вставке нового значения a1 = 32, нужно вставить в таблицу первое значение a2 для a1. Понадобится дополнительное поле, содержащее дату вставки новой записи (timestamp).

INSERT INTO tbl_name
SELECT 32, a2, timestamp FROM tbl_name WHERE timestamp = (SELECT MIN(timestamp) FROM tbl_name WHERE a1 = 32)
23 ноя 11, 14:00    [11644392]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

Откуда:
Сообщений: 127
tpg
Что есть - "фиксировать первое значение а2 при каждом появлении в таблице а1 = 32"?

например, при появлении 32 записываем в переменную 10594.82 ,в ообще таблица имеет вид
a1	a2 а3
32  18	10681.39   
32  18	10651.95
32  18  	10618.33
32  18 	10594.82
0    18        10587.96
0    18	10578.16
16   18     10568.47
18   18 	10563.19
18   32    10557.68
18   32   10551.25
18   32   10542.13
18   32  10535.062 

и в результате нужно при появлении а2=32 запомнить а3 =10557,68 и сложить с ним число запомненное при а1 =32 10594,82
23 ноя 11, 14:05    [11644442]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

Откуда:
Сообщений: 127
Konst_One
ТС, без правила сортировки вы ничего не добьётесь.
у вас есть ключевое поле?

поле времени есть для кажой записи
23 ноя 11, 14:06    [11644457]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
не взлетит(с)
23 ноя 11, 14:06    [11644458]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
скрипт создания вашей таблицы сюда выкладывайте
23 ноя 11, 14:07    [11644469]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
fabulaspb
Member

Откуда: Санкт-Петербург
Сообщений: 34
Получить сумму можно с помощью след. запроса:

SELECT a3 +
(SELECT SUM(a3) FROM tbl_name WHERE timestamp = (SELECT MIN(timestamp) FROM tbl_name WHERE a2 = 32))
FROM tbl_name WHERE timestamp = (SELECT MAX(timestamp) FROM tbl_name WHERE a1 = 32)
23 ноя 11, 14:24    [11644612]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

Откуда:
Сообщений: 127
Konst_One
скрипт создания вашей таблицы сюда выкладывайте


INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (18, 32, 11430.23, '20111122 10:41:58')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (18, 32, 11433.4, '20111122 10:41:59')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (18, 32, 11439.26, '20111122 10:42:00')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (16, 32, 11443.27, '20111122 10:42:01')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (0, 32, 11447.09, '20111122 10:42:02')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (0, 32, 11453.3, '20111122 10:42:03')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 11459.99, '20111122 10:42:04')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 11484.11, '20111122 10:42:05')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 11505.05, '20111122 10:42:06')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 11529.38, '20111122 10:42:07')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 18, 2071.918, '20111122 11:50:02')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 18, 2049.118, '20111122 11:50:03')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 18, 2022.6, '20111122 11:50:04')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 16, 1997.872, '20111122 11:50:05')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 16, 1971.343, '20111122 11:50:06')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 0, 1947.752, '20111122 11:50:07')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 0, 1927.172, '20111122 11:50:08')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 0, 1912.954, '20111122 11:50:09')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 0, 1898.59, '20111122 11:50:10')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 1889.409, '20111122 11:50:11')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 1887.479, '20111122 11:50:12')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 1884.214, '20111122 11:50:13')
GO
INSERT INTO [Запрос_Результат] ([a1], [a2], [a3], [time])
VALUES (32, 32, 1882.552, '20111122 11:50:14')
GO

нужно из a1 a2 a3 time
32 32 11459.99 22.11.2011 10:42:04

вычесть
a1 a2 a3 time
32 32 1889.409 22.11.2011 11:50:11 в итоге 11459,99 - 1889,409
очень важен именно переход от 18 ти к первому значению 32 и подсчет в эти времена данных
23 ноя 11, 14:33    [11644710]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
скрипт таблицы скрываете? где же ваше ключевое поле или вы считаете, что столбец [time] вам даст уникальность?
23 ноя 11, 14:35    [11644732]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

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

время time уникально в этой таблице
23 ноя 11, 14:37    [11644743]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
странно это как-то , у вас такие разряженные данные, что не бывает значений за одно и то же время?
23 ноя 11, 14:48    [11644901]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

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

промежутки пока начнеться переход 18 к 32 могут и по полчаса быть
23 ноя 11, 14:50    [11644939]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
trace2003
нужно из a1 a2 a3 time
32 32 11459.99 22.11.2011 10:42:04

вычесть
a1 a2 a3 time
32 32 1889.409 22.11.2011 11:50:11 в итоге 11459,99 - 1889,409
очень важен именно переход от 18 ти к первому значению 32 и подсчет в эти времена данных


что-то алгоритм ваш не совсем ясен.

a1+a2 = взять max(time) - min(time)
а дальше то что?
23 ноя 11, 14:50    [11644943]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
fabulaspb
Если я правильно понял, при вставке нового значения a1 = 32, нужно вставить в таблицу первое значение a2 для a1. Понадобится дополнительное поле, содержащее дату вставки новой записи (timestamp).

INSERT INTO tbl_name
SELECT 32, a2, timestamp FROM tbl_name WHERE timestamp = (SELECT MIN(timestamp) FROM tbl_name WHERE a1 = 32)
Что за фигня?
timestamp пока не имеет никакого отношения к дате/времени
23 ноя 11, 14:51    [11644950]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

Откуда:
Сообщений: 127
Konst_One
trace2003
нужно из a1 a2 a3 time
32 32 11459.99 22.11.2011 10:42:04

вычесть
a1 a2 a3 time
32 32 1889.409 22.11.2011 11:50:11 в итоге 11459,99 - 1889,409
очень важен именно переход от 18 ти к первому значению 32 и подсчет в эти времена данных


что-то алгоритм ваш не совсем ясен.

a1+a2 = взять max(time) - min(time)
а дальше то что?


обрабатывать дальше таблицу(значнеий очнеь много) и значения каждого вычитания выводить кудато напримре в новую таблицу
23 ноя 11, 14:55    [11645001]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
а что у вас значения :
a1= 0 , a2 = 32

и тп?
23 ноя 11, 14:59    [11645052]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

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

а1 и а2 всегда или 0 или 16 или 32
23 ноя 11, 15:00    [11645065]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
a1          a2          a3                    time
----------- ----------- --------------------- -----------------------
18 32 11430,23 2011-11-22 10:41:58.000
18 32 11433,40 2011-11-22 10:41:59.000
18 32 11439,26 2011-11-22 10:42:00.000
16 32 11443,27 2011-11-22 10:42:01.000
0 32 11447,09 2011-11-22 10:42:02.000
0 32 11453,30 2011-11-22 10:42:03.000
32 32 11459,99 2011-11-22 10:42:04.000
32 32 11484,11 2011-11-22 10:42:05.000
32 32 11505,05 2011-11-22 10:42:06.000
32 32 11529,38 2011-11-22 10:42:07.000
32 18 2071,918 2011-11-22 11:50:02.000
32 18 2049,118 2011-11-22 11:50:03.000
32 18 2022,60 2011-11-22 11:50:04.000
32 16 1997,872 2011-11-22 11:50:05.000
32 16 1971,343 2011-11-22 11:50:06.000
32 0 1947,752 2011-11-22 11:50:07.000
32 0 1927,172 2011-11-22 11:50:08.000
32 0 1912,954 2011-11-22 11:50:09.000
32 0 1898,59 2011-11-22 11:50:10.000
32 32 1889,409 2011-11-22 11:50:11.000
32 32 1887,479 2011-11-22 11:50:12.000
32 32 1884,214 2011-11-22 11:50:13.000
32 32 1882,552 2011-11-22 11:50:14.000

из этих данных совсем не ясно, что же вы хотите получить и, главное, как?
23 ноя 11, 15:10    [11645182]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

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

перебираем значения а1 до тех пор пока не найдем прееход от меньших чисел к 32. запоминаем а1.а3.
перебираем значения а2 до тех пор пока не найдем прееход от меньших чисел к 32. запоминаем а2.а3.
вычитаем а1.а3 -а2.а3 ложим кудато идем дальше и ищем подобные переходы. ложим все это в таблицу и можно еще указывать возле кажого а1.а3 -а2.а3 временной интервал между ними
23 ноя 11, 15:18    [11645270]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ну так и разбирайте потсрочно в курсоре или ещё как
23 ноя 11, 15:20    [11645292]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
не "ложим", а кладём
23 ноя 11, 15:21    [11645297]     Ответить | Цитировать Сообщить модератору
 Re: Перебор значений  [new]
trace2003
Member

Откуда:
Сообщений: 127
Konst_One
ну так и разбирайте потсрочно в курсоре или ещё как

я не знаю как это делать и прощу помощи. просьба не отсылать читать меня кудато.
23 ноя 11, 15:23    [11645326]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить