2010-07-08 2 views
0
 
+------+-------------------------+ 
| proc |     endTime | 
+------+-------------------------+ 
| A | 2010/01/01 12:10:00.000 | 
| B | 2010/01/01 12:08:00.000 | 
| C | 2010/01/01 12:05:00.000 | 
| D | 2010/01/01 12:02:00.000 | 
| ...|      ... |

Поэтому в основном данные, которые я тянуть из базы данных будет выглядеть, как выше, с первого столбца, имя процесса, а второй колонке времени он закончил работу. Я хочу добавить столбец THIRD, где будет отображаться время выполнения процесса.SQL - Выведите Дата Разница Колонка

В принципе, я хочу, чтобы данные вытащил, чтобы посмотреть, как это вместо:

 
+------+-------------------------+--------------+ 
| proc |     endTime | runningTime | 
+------+-------------------------+--------------+ 
| A | 2010/01/01 12:10:00.000 |    | (process a is not done running) 
| B | 2010/01/01 12:08:00.000 | 00:03:00.000 | 
| C | 2010/01/01 12:05:00.000 | 00:03:00.000 | 
| D | 2010/01/01 12:02:00.000 | 00:02:00.000 | (assume 12:00 start time) 
| ...|      ... |   ... |

И я знаю, что это было бы проще добавить startTime колонку и из этого определения runningTime, но у меня нет доступа к измените это, и, несмотря на то, что старые данные не будут иметь startTime для работы в любом случае.

Первое время начала процесса произвольно, но вы видите, что я получаю. Мы знаем время выполнения proc C на основе того, когда proc D закончился, и когда proc C закончил (вычтите первый из второго).

Как вычислить эту третью строку на основе разницы между «Row X Col B» и «Row X-1 Col B»?

+0

Это похоже на результаты MySQL - какие СУБД вы используете? – Mike

+0

Microsoft SQL Server, я думаю, я должен был сделать это ясно. – gjk

+0

Вы отметили его как SQL, а не MySQL - это просто, что ваш пример вывода выглядел как MySQL для меня. Я не знаю, можно ли реплицировать метод MySQL, который я использовал с MS SQL, поскольку он не позволяет назначать переменные в SELECT, который также возвращает данные. – Mike

ответ

1

Я не думаю, что вы можете добавить его в качестве «расчетной колонки». Вы можете вычислить его в представлении довольно легко, как это (весь код для MSSQL Ваша функция преобразования может изменяться.):

select 
    e1.RowID, 
    e2.EndTime as StartTime, 
    e1.EndTime, runningtime=convert(varchar(20), e1.EndTime - e2.EndTime, 114) 
from endtimetest e1 
    left join endtimetest e2 on e2.endtime = 
      (Select max(endtime) 
       from endtimetest 
       where endtime < e1.Endtime) 

Или, вы можете вычислить его в триггере с чем-то подобным.

+0

Я пошел с этим. Это требует времени, потому что есть много записей, но это выполнило задачу. – gjk

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