Учитывая эти таблицы:SQL Query, который вычисляет время
Item
-----
Id
Description
Status
CreatedBy
ItemLog
--------
Id
ItemId
NewStatus
TimeStamp
ChangedBy
Где Itemlog.ItemId = Item.Id
и Status = { "Created", "Pended", "Cancelled", "Completed" }
...
Как бы вы написать SQL запрос, чтобы генерировать следующие результаты:
Item Description ChangeDate NewStatus ChangedBy
1 Test1 2012-01-01 Created User1
1 Test1 2012-01-02 Pended User2
1 Test1 2012-01-03 Completed User2
2 Test2 2012-01-01 Created User2
2 Test2 2012-01-02 Pended User3
2 Test2 2012-01-09 Cancelled User1
3 Test3 2012-01-01 Created User1
3 Test3 2012-01-02 Pended User1
Item CurrentUser CurrentStatus CreatedOn TotalTime TimePended CompletedDate CancelledDate
Test1 User2 Completed 2012-01-01 3 days 1 day 2012-01-03 (null)
Test2 User1 Completed 2012-01-01 9 days 7 days (null) 2012-01-09
Test3 User1 Pended 2012-01-01 35 days 34 days (null) (null)
Который я хочу отобразить как отчет master-detail
в своем приложении.
Первый ResultSet простой запрос с парой объединений (я не включал UserId-UserName
таблицы и т.д.)
Твердая часть расчет общего времени ...
TimeToComplete
является TimeStamp
последних ItemLog
минус TimeStamp
первого ItemLog
(где ItemLog
упорядочивается по дате).
TimePended
- это сумма разницы в TimeStamps
между каждым изменением статуса из-за ошибки -> что-то.
Ну, я только что закончил то, что вычисляет поле TotalTime, получая МИН TimeStamp, а Мах TimeStamp, группируя их по Id, и затем подставляя их друг из друга. Я не могу думать, как делать PendedTime без использования курсора. – grimstoner
Что такое СУБД? – eaolson
Microsoft Sql Server 2008 R2 – grimstoner