2015-03-05 1 views
0
ticketid owner owndate 
    1001 LEWIS 2004-06-18 14:15:11.000 
    1001 WILSON 2004-06-18 14:16:54.000 
    1001 WILSON 2004-06-18 14:21:12.000 
    1001 NULL 2004-09-01 09:56:11.000 
    1001 CALDONE 2005-02-02 08:38:28.000 
    1001 SINCLAIR 2005-02-02 08:54:02.000 
    1002 NULL 2005-02-02 08:40:06.000 
    1002 WILSON 2004-06-18 14:33:47.000 
    1002 NULL 2004-08-31 15:12:46.000 
    1002 NULL 2004-09-24 10:03:09.000 
    1003 RAMSDALE 2004-09-24 10:04:24.000 
    1003 MOTIKA 2004-08-31 14:51:45.000 
    1003 NULL 2004-08-31 15:05:50.000 
1003 MURTHY 2004-09-02 14:50:28.000 
1004 NULL 2004-08-31 15:28:37.000 
1004 NULL 2004-09-24 09:24:21.000 
1005 WILSON 2004-09-02 16:29:43.000 

Выход должен бытьКак стержень используется для выбора первых трех владельцев конкретной TicketID

ticketid owner1 owner2 owner3 
1001 NULL NULL NULL 
1002 NULL NULL NULL 
1003 NULL NULL NULL 
1004 NULL NULL NULL 
1005 NULL NULL NULL 
1006 NULL NULL NULL 
1007 NULL NULL NULL 
1008 NULL NULL NULL 

Вместо NULL. Это должно показать разницу в собственном. то есть конкретный владелец назначается на билет в течение долгого времени. Я хочу показать первым трем владельцам конкретного билета. Пожалуйста, руководство. Я подсчитал разницу во времени как:

WITH rows AS 
     (
     SELECT *, ROW_NUMBER() OVER (ORDER BY owndate) AS rn 
     FROM tkownerhistory 
     ) 
SELECT mc.ticketid, mc.owner,mc.owndate 
,left('0' + CAST((dATEDIFF(SECOND, mc.owndate, mp.owndate))/86400*30 AS VARCHAR),2) + ' months ' + 
left('0' + CAST((dATEDIFF(SECOND, mc.owndate, mp.owndate))/86400 AS VARCHAR),2) + ' days ' + 
left('0' + CAST((dATEDIFF(SECOND, mc.owndate, mp.owndate))/3600 AS VARCHAR),2) + ':' + 
right('0' + CAST(((dATEDIFF(SECOND, mc.owndate, mp.owndate))/60) % 60 AS VARCHAR),2) + ':' + 
right('0' + CAST((dATEDIFF(SECOND, mc.owndate, mp.owndate)) % 60 AS VARCHAR),2) 

as TimeDiffInHours 
FROM rows mc 
JOIN rows mp 
ON mc.rn = mp.rn-1 
order by mc.owndate 

это показывает выход

1001 LEWIS 2004-06-18 14:15:11.000 00 months 00 days 00:01:43 
1001 WILSON 2004-06-18 14:16:54.000 00 months 00 days 00:04:18 
1001 WILSON 2004-06-18 14:21:12.000 00 months 00 days 00:12:35 
1002 WILSON 2004-06-18 14:33:47.000 02 months 07 days 01:13:32 
1005 MOTIKA 2004-08-31 14:47:19.000 00 months 00 days 00:04:26 
1003 MOTIKA 2004-08-31 14:51:45.000 00 months 00 days 00:14:05 
1003 NULL 2004-08-31 15:05:50.000 00 months 00 days 00:06:56 
1002 NULL 2004-08-31 15:12:46.000 00 months 00 days 00:15:51 

Но я не уверен, как это может быть повернута и только первые три владельцы определенного идентификатора билета выбраны в качестве столбцов и данные будут «timediffinhours»

+0

Для конкретного TicketID вы должны пройти parameter.Secondly первых, вы должны получить основное право запроса, то в дальнейшем вы можете esily поворота it.like SELECT * , ROW_NUMBER() OVER (раздел [owner] ORDER BY owndate) AS rn FROM tkownerhistory где ticketid = 1001.Есть ли оно правильно? – KumarHarsh

+0

Я не могу разбить его владельцем, поскольку я использую номер строки, чтобы рассчитать разницу между двумя собственными датами билета. –

+0

Вы можете получить правильные первые три владельца по вашему запросу? – KumarHarsh

ответ

0

Успение i) вам нужно поворачивать только для 3 владельцев.

ii) Я показываю датифф во втором, вы можете легко преобразовать их в форматированный формат, как указано выше.

Кроме того, дайте мне знать, где проблема,

Declare @tkownerhistory table(ticketid int, [owner] varchar(50),owndate datetime) 
     insert into @tkownerhistory values(1001,'LEWIS','2004-06-18 14:15:11.000'), 
     (1001,'WILSON','2004-06-18 14:16:54.000'), 
     (1001,'WILSON','2004-06-18 14:21:12.000'), 
     (1001,NULL ,'2004-09-01 09:56:11.000'), 
     (1001,'CALDONE','2005-02-02 08:38:28.000'), 
     (1001,'SINCLAIR','2005-02-02 08:54:02.000'), 
     (1002,NULL ,'2005-02-02 08:40:06.000'), 
     (1002,'WILSON','2004-06-18 14:33:47.000'), 
     (1002, NULL,'2004-08-31 15:12:46.000'), 
     (1002, NULL,'2004-09-24 10:03:09.000'), 
     (1003,'RAMSDALE','2004-09-24 10:04:24.000'), 
     (1003,'MOTIKA','2004-08-31 14:51:45.000'), 
     (1003, NULL,'2004-08-31 15:05:50.000'), 
    (1003, 'URTHY','2004-09-02 14:50:28.000'), 
    (1004 , NULL , '2004-08-31 15:28:37.000'), 
    (1004 , NULL, '2004-09-24 09:24:21.000'), 
    (1005, 'WILSON','2004-09-02 16:29:43.000') 

    ;With CTE as 
(
SELECT *, ROW_NUMBER() OVER (partition by ticketid ORDER BY ticketid,owndate) AS rn 
     --,datediff(day,owndate,lead(owndate,1)over(order by owndate))dtdiff 
     FROM @tkownerhistory 

) 
,CTE1 as 
(
select * 
from cte 
where rn<=4 
) 
--select * from cte1 
select a.ticketid 
     ,datediff(second,a.owndate,b.owndate)[owner1] 
      ,datediff(second,b.owndate,c.owndate)[owner2] 
    ,datediff(second,c.owndate,d.owndate)[owner3] 
from 
cte1 A 
outer apply(select * from cte1 where ticketid=a.ticketid and rn=2)b 
outer apply(select * from cte1 where ticketid=a.ticketid and rn=3)c 
outer apply(select * from cte1 where ticketid=a.ticketid and rn=4)d 
where a.rn=1 
+0

выход правильный. Спасибо большое. –

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