2014-11-27 3 views
0

У меня есть таблица, содержащая веса с течением времени, которые я хочу, чтобы оценить, как поток:борется с SQL агрегатной функции

Scan TimeStamp  Position Weight 
01  14/11/01 12:00 0   0 
01  14/11/01 12:10 10  1.6 
02  14/11/01 13:00 0   2.6 
02  14/11/01 13:10 10  4.2 
... 

Теперь я хочу, чтобы вычислить поток во время сканирования (начало до конца). Мой запрос выглядит следующим образом:

Select MeanTime, TheFlow From 
(Select AVG(TheTimeStamp) as MeanTime From flow Where ScanNumber=73), 
(Select Weightdiff/TimeSpan as TheFlow From 
     (Select (MaxWeight - MinWeight) as WeightDiff From 
      (Select Weight as MAXWEIGHT from Flow Where ScanNumber=73 HAVING "POSITION"=MAX("POSITION")), 
      (Select Weight as MINWEIGHT from FLOW Where ScanNumber=73 HAVING "POSITION"=MIN("POSITION")), 
     (Select (MaxTime - MinTime) * 24 as TimeSpan From 
      (Select MAX("THETIMESTAMP") as MaxTime From FLOW Where ScanNumber=73), 
      (Select MIN("THETIMESTAMP") as MinTime From Flow Where ScanNumber=73)))); 

Я получаю сообщение об ошибке:

SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

Что случилось?

Чтобы прояснить мой вопрос, мне нужно, чтобы извлечь следующую информацию из данных:

  1. среднее время между началом (например, 12:00.) И в конце, например. 12:10) сканирования (среднее время) , например. Scannumber 01), т.е. 12:05
  2. мне нужна разница в весе между конечным и начальным
  3. Я должен вычислить «поток» от веса дифф и время между началом и концом
  4. Все в все, что нужно два данных. Время и поток, которые я хочу построить (поток во времени).
+0

Что вы подразумеваете под «вычислением потока во время сканирования»? Вы имеете в виду рассчитать разницу в весе между началом и остановкой? Можете ли вы предоставить желаемый результат? –

+0

Желаемый выход будет выглядеть так: 14/11/01 12:05 1.6 и 14/11/01 13:05 1.6 (Среднее время сканирования, вес при концевом весе при запуске) – llnck

+0

Какая у вас система баз данных и какая версия ? –

ответ

0

Это должно выполнить задание для отдельного сканирования, которое, по-видимому, является требованием.

DECLARE @Scan INT = 1 
SELECT 
    MeanTime = DATEADD(SECOND, DATEDIFF(SECOND, FirstScan.TimeStamp, LastScan.TimeStamp), FirstScan.TimeStamp) 
    , WeightDifference = LastScan.Weight - FirstScan.Weight 
FROM 
    (SELECT Position = MIN(Position) FROM Flow WHERE Scan = @Scan) MinScan 
    CROSS JOIN (SELECT Position = MAX(Position) FROM Flow WHERE Scan = @Scan) MaxScan 
    INNER JOIN Flow FirstScan ON MinScan.Position = FirstScan.Position 
     AND FirstScan.Scan = @Scan 
    INNER JOIN Flow LastScan ON MaxScan.Position = LastScan.Position 
     AND LastScan.Scan = @Scan 

 Смежные вопросы

  • Нет связанных вопросов^_^