Здравствуйте, Anton Burtsev, Вы писали:
AB>Я написал какую-то чушь выше, а удалить или поправить нельзя (( не бейте больно...
AB>вот вариант:
AB>AB>select xInstrument, AVG(xAvgLatency_star), SUM(xCount) from (
AB>select
AB> *,
AB> (test.xAvgLatency - (
AB> select top 1 t1.xAvgLatency from test t1
AB> where t1.xInstrument = test.xInstrument and t1.xTime = (
AB> select MIN(t2.xTime) from test t2
AB> where t2.xInstrument = test.xInstrument and t2.xTime > 0))
AB> ) xAvgLatency_star
AB>from test ) t
AB>group by t.xInstrument
AB>
AB>И еще можно оптимизировать, вычисляя "*" не для каждой записи. а для каждого инструмента.
Спасибо за ответы. На самом деле здесь, в соседней теме встретил ссылку на опросник по SQL, с краткой вменяемой справкой и у меня получился следующий запрос:
SELECT RunId, Time, MAX(MaxLatency) MaxLatency, Avg(AvgLatency) vgLatency, SUM(Count) FROM
(
SELECT
S1.RunId RunId,
S1.Time Time,
S.Instrument Instrument,
S1.AvgLatency - S.AvgLatency AvgLatency,
S1.Count Count FROM
(
SELECT RunId, MIN(Time) as MinTime, Instrument FROM Stats S1
where RunId = '...' and AvgLatency != 0
group by RunId, Instrument
) as T
JOIN Stats S ON T.MinTime = S.Time and T.Instrument = S.Instrument and S.RunId = T.RunId
LEFT JOIN Stats S1 ON S1.RunId = T.RunId and S1.Instrument = T.Instrument
)
GROUP BY RunId, Time
ORDER BY Time
Т. е. сначала выбираем таблицу с MinTime — минимальным временем с ненулевым Latency, затем джойним к этому значение Latency при этом минимальном времени, а затем джойним все остальные данные и вычисляем то, что нам надо.