| Author |
Topic |
|
xcas08
Starting Member
13 Posts |
Posted - 2007-03-14 : 10:14:55
|
| Hello all I am not quite a beginner but not an expert at SQL. I'm kind of in a bind and need some help. I have a table that shows me statuses of tickets (open, pending, closed), some tickets could have as much as 25 rows/ticket. I want to try to avoid that but at the same time keep track of the time. Here's what I need to happen...with the data example below I need to take the ((closed date - first open date) - total of Waiting time). This will give me total time duration of the ticket. I'd like to either write a stored procedure or create a view that would do this for me. Any one have ideas?CallID DateStop TimeStop CallStatus00216177 2006-01-20 05:39:24 Open00216177 2006-01-20 05:39:27 Open00216177 2006-01-20 05:40:13 Open00216177 2006-01-20 05:40:24 Pending00216177 2006-02-07 16:05:47 Pending00216177 2006-02-21 17:26:22 Pending00216177 2006-02-21 17:29:06 Pending00216177 2006-02-21 17:29:08 Open00216177 2006-03-03 16:35:10 Open00216177 2006-04-05 15:12:26 Open00216177 2006-04-05 15:17:09 Open00216177 2006-04-14 14:37:49 Open00216177 2006-04-14 14:37:54 Awaiting00216177 2006-04-19 11:20:30 Awaiting00216177 2006-04-19 12:12:34 Awaiting00216177 2006-04-19 12:12:37 Awaiting00216177 2006-04-19 12:12:58 Awaiting00216177 2006-04-19 12:13:00 Closed |
|
|
harsh_athalye
Master Smack Fu Yak Hacker
5581 Posts |
Posted - 2007-03-14 : 10:17:34
|
| Duplicate post: [url]http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=80575[/url]Harsh AthalyeIndia."The IMPOSSIBLE is often UNTRIED" |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-14 : 10:25:04
|
| Total time in what?Seconds? Days? Hours?Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-14 : 10:26:32
|
| [code]-- Prepare sample dataDECLARE @Sample TABLE (CallID VARCHAR(8), DateStop VARCHAR(10), TimeStop VARCHAR(8), CallStatus VARCHAR(8))INSERT @SampleSELECT '00216177', '2006-01-20', '05:39:24', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:39:27', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:13', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:24', 'Pending' UNION ALLSELECT '00216177', '2006-02-07', '16:05:47', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:26:22', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:06', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:08', 'Open' UNION ALLSELECT '00216177', '2006-03-03', '16:35:10', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:12:26', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:17:09', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:49', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:54', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '11:20:30', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:34', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:37', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:58', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:13:00', 'Closed'-- Show the expected resultSELECT w.CallID, w.[Open], w.[Closed], DATEDIFF(DAY, w.[Open], w.[Closed]) AS DaysFROM ( SELECT x.CallID, MIN(CASE WHEN x.CallStatus = 'Open' THEN x.[Stop] END) AS [Open], MAX(CASE WHEN x.CallStatus = 'Closed' THEN x.[Stop] END) AS [Closed] FROM ( SELECT CallID, CAST(DateStop + ' ' + TimeStop AS DATETIME) AS [Stop], CallStatus FROM @Sample ) AS x GROUP BY x.CallID ) AS wORDER BY w.CallID[/code]Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-14 : 10:29:25
|
If you are not interested in the time, use this-- Prepare sample dataDECLARE @Sample TABLE (CallID VARCHAR(8), DateStop VARCHAR(10), TimeStop VARCHAR(8), CallStatus VARCHAR(8))INSERT @SampleSELECT '00216177', '2006-01-20', '05:39:24', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:39:27', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:13', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:24', 'Pending' UNION ALLSELECT '00216177', '2006-02-07', '16:05:47', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:26:22', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:06', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:08', 'Open' UNION ALLSELECT '00216177', '2006-03-03', '16:35:10', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:12:26', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:17:09', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:49', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:54', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '11:20:30', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:34', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:37', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:58', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:13:00', 'Closed'-- Show the expected resultSELECT w.CallID, w.[Open], w.[Closed], DATEDIFF(DAY, w.[Open], w.[Closed]) AS DaysFROM ( SELECT CallID, MIN(CASE WHEN CallStatus = 'Open' THEN CAST(DateStop AS DATETIME) END) AS [Open], MAX(CASE WHEN CallStatus = 'Closed' THEN CAST(DateStop AS DATETIME) END) AS [Closed] FROM @Sample GROUP BY CallID ) AS wORDER BY w.CallID Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-14 : 10:31:05
|
And if DateStop already is DATETIME (which it really should be)-- Prepare sample dataDECLARE @Sample TABLE (CallID VARCHAR(8), DateStop DATETIME, TimeStop VARCHAR(8), CallStatus VARCHAR(8))INSERT @SampleSELECT '00216177', '2006-01-20', '05:39:24', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:39:27', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:13', 'Open' UNION ALLSELECT '00216177', '2006-01-20', '05:40:24', 'Pending' UNION ALLSELECT '00216177', '2006-02-07', '16:05:47', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:26:22', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:06', 'Pending' UNION ALLSELECT '00216177', '2006-02-21', '17:29:08', 'Open' UNION ALLSELECT '00216177', '2006-03-03', '16:35:10', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:12:26', 'Open' UNION ALLSELECT '00216177', '2006-04-05', '15:17:09', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:49', 'Open' UNION ALLSELECT '00216177', '2006-04-14', '14:37:54', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '11:20:30', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:34', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:37', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:12:58', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19', '12:13:00', 'Closed'-- Show the expected resultSELECT w.CallID, w.[Open], w.[Closed], DATEDIFF(DAY, w.[Open], w.[Closed]) AS DaysFROM ( SELECT CallID, MIN(CASE WHEN CallStatus = 'Open' THEN DateStop END) AS [Open], MAX(CASE WHEN CallStatus = 'Closed' THEN DateStop END) AS [Closed] FROM @Sample GROUP BY CallID ) AS wORDER BY w.CallID Peter LarssonHelsingborg, Sweden |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-03-14 : 10:33:04
|
If you want your table to be maintainable in the long run, you should not separate the date and the time information.-- Prepare sample dataDECLARE @Sample TABLE (CallID VARCHAR(8), [Stop] DATETIME, CallStatus VARCHAR(8))INSERT @SampleSELECT '00216177', '2006-01-20 05:39:24', 'Open' UNION ALLSELECT '00216177', '2006-01-20 05:39:27', 'Open' UNION ALLSELECT '00216177', '2006-01-20 05:40:13', 'Open' UNION ALLSELECT '00216177', '2006-01-20 05:40:24', 'Pending' UNION ALLSELECT '00216177', '2006-02-07 16:05:47', 'Pending' UNION ALLSELECT '00216177', '2006-02-21 17:26:22', 'Pending' UNION ALLSELECT '00216177', '2006-02-21 17:29:06', 'Pending' UNION ALLSELECT '00216177', '2006-02-21 17:29:08', 'Open' UNION ALLSELECT '00216177', '2006-03-03 16:35:10', 'Open' UNION ALLSELECT '00216177', '2006-04-05 15:12:26', 'Open' UNION ALLSELECT '00216177', '2006-04-05 15:17:09', 'Open' UNION ALLSELECT '00216177', '2006-04-14 14:37:49', 'Open' UNION ALLSELECT '00216177', '2006-04-14 14:37:54', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19 11:20:30', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19 12:12:34', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19 12:12:37', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19 12:12:58', 'Awaiting' UNION ALLSELECT '00216177', '2006-04-19 12:13:00', 'Closed'-- Show the expected resultSELECT w.CallID, w.[Open], w.[Closed], DATEDIFF(DAY, w.[Open], w.[Closed]) AS DaysFROM ( SELECT CallID, MIN(CASE WHEN CallStatus = 'Open' THEN [Stop] END) AS [Open], MAX(CASE WHEN CallStatus = 'Closed' THEN [Stop] END) AS [Closed] FROM @Sample GROUP BY CallID ) AS wORDER BY w.CallID Peter LarssonHelsingborg, Sweden |
 |
|
|
|
|
|