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

Откуда:
Сообщений: 13
Камрады!

Дано:
- Таблица, в которой значение runId обновляется на 1 каждый день, если запускается scheduler
- Если scheduler не запускается, то значение не изменяется, а на следующий день runId + 2 и т.д.
т.е. если scheduler не запускаляся 5 дней, при следующем запуске runId = previousRUNID + 5
- каждый раз запускаются одни и те же тесты (TestName)

id . runid.....datetime......Version.................Test................
---|--------|----------------|---------------|-----------------------------|
1 | 840 | 04/23/2019 |7.4.1841.0 | Semi\SingleULD\Test1 |
2 | 839 | 04/22/2019 |7.4.1841.0 | Semi\SingleULD\Test1 |
5 | 838 | 04/21/2019 |7.4.1840.0 | Semi\SingleULD\Test1 |
3 | 837 | 04/19/2019 |7.4.1839.0 | Semi\SingleULD\Test1 |
4 | 836 | 04/18/2019 |7.4.1836.0 | Semi\SingleULD\Test1 |
6 | 835 | 04/17/2019 |7.4.1836.0 | Semi\SingleULD\Test1 |
7 | 830 | 04/12/2019 |7.4.1836.0 | Semi\SingleULD\Test1 |
8 | 829 | 04/11/2019 |7.4.1835.0 | Semi\SingleULD\Test1 |


Задача:
- при каждом следующем запуске, вытаскивать предыдущий runId

Текущая конструкция: - не имеет правильной связи с последним значение runId
from SQL runid = (previousRunid - 1) - неправильная, так как не всегда предыдущее значение меньше на 1

string previousResults = "select * from ( select TestName, cast([Total Time E2E] as decimal(10, 1)) E2E , SLA , UnitsCount, TestsCount, " + 
"RANK() OVER(PARTITION BY TestName ORDER BY startTime desc) rnk from [dbo].[BenchmarkTestsSummary] 
where ( OptimalVersion='" +  currentBuild + "' and TestEnvironment='" + Environment + "' and runid='" + (previousRunid - 1) + "')" +
 ") Index_Test where Index_Test.rnk = 1 order by TestName";


Нужно: выбирать MAX runId их всего предыдущего списка

К сообщению приложен файл. Размер - 64Kb
10 фев 20, 17:34    [22077004]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
court
Member

Откуда:
Сообщений: 1930
string previousResults = "select * from ( select top 1 TestName, cast([Total Time E2E] as decimal(10, 1)) E2E , SLA , UnitsCount, TestsCount, " + 
"RANK() OVER(PARTITION BY TestName ORDER BY startTime desc) rnk from [dbo].[BenchmarkTestsSummary] 
where ( OptimalVersion='" +  currentBuild + "' and TestEnvironment='" + Environment + "' and runid<" + previousRunid + ") order by runid desc" +
 ") Index_Test where Index_Test.rnk = 1 order by TestName";


пс
Я ж думаю что runid у тебя числовое поле, так ?
А кавычками ты его "окружаешь" просто по "доброте душевной", правильно ?

вот это имеется в виду
автор
runid='" + (previousRunid - 1) + "'


Сообщение было отредактировано: 10 фев 20, 18:04
10 фев 20, 18:02    [22077042]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Vikonder
Member

Откуда:
Сообщений: 13
Народ, вот такая вот конструкция будет работать....???

SELECT MAX(runid) from [dbo].[BenchmarkTestsSummary]
WHERE runid < previousrunID

Сообщение было отредактировано: 10 фев 20, 18:03
10 фев 20, 18:03    [22077046]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Vikonder
Member

Откуда:
Сообщений: 13
court
string previousResults = "select * from ( select top 1 TestName, cast([Total Time E2E] as decimal(10, 1)) E2E , SLA , UnitsCount, TestsCount, " + 
"RANK() OVER(PARTITION BY TestName ORDER BY startTime desc) rnk from [dbo].[BenchmarkTestsSummary] 
where ( OptimalVersion='" +  currentBuild + "' and TestEnvironment='" + Environment + "' and runid<" + previousRunid + ") order by runid desc" +
 ") Index_Test where Index_Test.rnk = 1 order by TestName";



не будет выбираться MAX
10 фев 20, 18:07    [22077052]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Владислав Колосов
Member

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

что-то вы намутили... Создайте закольцованную последовательность от одного до пять и при старте теста берите очередное значение.
10 фев 20, 18:28    [22077075]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Vikonder
Member

Откуда:
Сообщений: 13
Владислав Колосов
Vikonder,

что-то вы намутили... Создайте закольцованную последовательность от одного до пять и при старте теста берите очередное значение.


И как это поможет выбирать предыдущее значение?
10 фев 20, 18:32    [22077078]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Владислав Колосов
Member

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

Вам не надо знать предыдущее, об этом последовательность позаботится. 1.2.3.4.5.1.2.3.4.5 Когда бы ни запустили - получите номер теста, следующий по порядку относительно последнего выполненного.
10 фев 20, 18:43    [22077089]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7319
У вас задача какая - перебирать тесты по очереди?
10 фев 20, 18:47    [22077094]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Vikonder
Member

Откуда:
Сообщений: 13
Владислав Колосов
У вас задача какая - перебирать тесты по очереди?


Для каждого Набора тестов иметь результат текущего (для runid) и предыдущего (для previuosRunId) запуска.
При условии, что previuosRunId != runid - 1 (в общем случае)
Как частный случай, если всё работает каждый день previuosRunId = runid - 1
11 фев 20, 13:35    [22077567]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Vikonder

Для каждого Набора тестов иметь результат текущего (для runid) и предыдущего (для previuosRunId) запуска.
При условии, что previuosRunId != runid - 1 (в общем случае)
Как частный случай, если всё работает каждый день previuosRunId = runid - 1


-- Тестовые данныe 
WITH a (id, runid, [datetime], [Version], Test, result ) AS ( 
    SELECT 1 , 840 , '04/23/2019', '7.4.1841.0', 'Semi\SingleULD\Test1', 'SUCCESS' UNION ALL
    SELECT 2 , 839 , '04/22/2019', '7.4.1841.0', 'Semi\SingleULD\Test1', 'FAIL'    UNION ALL
    SELECT 5 , 838 , '04/21/2019', '7.4.1840.0', 'Semi\SingleULD\Test1', 'SUCCESS' UNION ALL
    SELECT 3 , 837 , '04/19/2019', '7.4.1839.0', 'Semi\SingleULD\Test1', 'FAIL'	   UNION ALL
    SELECT 4 , 836 , '04/18/2019', '7.4.1836.0', 'Semi\SingleULD\Test1', 'SUCCESS' UNION ALL
    SELECT 6 , 835 , '04/17/2019', '7.4.1836.0', 'Semi\SingleULD\Test1', 'FAIL'    UNION ALL
    SELECT 7 , 830 , '04/12/2019', '7.4.1836.0', 'Semi\SingleULD\Test1', 'SUCCESS' UNION ALL
    SELECT 8 , 829 , '04/11/2019', '7.4.1835.0', 'Semi\SingleULD\Test1', 'FAIL'     UNION ALL
    SELECT 9 , 8401 , '12/23/2020', '7.4.1841.0', 'Semi\SingleULD\Test2' , 'SUCCESS' UNION ALL
    SELECT 10 , 8391 , '12/22/2020', '7.4.1841.0', 'Semi\SingleULD\Test2', 'FAIL'    UNION ALL
    SELECT 11 , 8381 , '12/21/2020', '7.4.1840.0', 'Semi\SingleULD\Test2', 'SUCCESS' UNION ALL
    SELECT 12 , 8371 , '12/19/2020', '7.4.1839.0', 'Semi\SingleULD\Test2', 'FAIL'	   UNION ALL
    SELECT 13 , 8361 , '12/18/2020', '7.4.1836.0', 'Semi\SingleULD\Test2', 'SUCCESS' UNION ALL
    SELECT 14 , 8351 , '12/17/2020', '7.4.1836.0', 'Semi\SingleULD\Test2', 'FAIL'    UNION ALL
    SELECT 15 , 8301 , '04/12/2019', '7.4.1836.0', 'Semi\SingleULD\Test2', 'SUCCESS' UNION ALL
    SELECT 16 , 8291 , '04/11/2019', '7.4.1835.0', 'Semi\SingleULD\Test2', 'FAIL'    
), 
-- Решение
b AS (
SELECT 
       a.id
     , a.runid
     , a.[datetime]
     , a.[Version]
     , a.Test
	, a.result
     , LAG(a.result, 1, a.result) OVER(PARTITION BY a.[Test] ORDER BY a.runid) AS [Предыдущий result]
     , ROW_NUMBER() OVER(PARTITION BY a.[Test] ORDER BY a.runid DESC) AS rn
FROM 
     a) 
SELECT 
       b.id
     , b.runid
     , b.[datetime]
     , b.[Version]
     , b.Test
	, b.result
     , b.[Предыдущий result]
FROM b 
    WHERE b.rn = 1
11 фев 20, 14:46    [22077645]     Ответить | Цитировать Сообщить модератору
 Re: MAX значение INT из списка, относительно текущего значения  [new]
Владислав Колосов
Member

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

Если предыдущий номер получить, то

select top (1) lead(runid) over (order by runid desc) id from [dbo].[BenchmarkTestsSummary]


Сообщение было отредактировано: 11 фев 20, 14:51
11 фев 20, 14:51    [22077651]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить