Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL批处理数据,希望根据上次更新的时间戳找到每个状态的运行时间(分钟)?_Sql_Sql Server_Datetime_Sequence_Timing - Fatal编程技术网

SQL批处理数据,希望根据上次更新的时间戳找到每个状态的运行时间(分钟)?

SQL批处理数据,希望根据上次更新的时间戳找到每个状态的运行时间(分钟)?,sql,sql-server,datetime,sequence,timing,Sql,Sql Server,Datetime,Sequence,Timing,票证可以跳入和跳出状态,并且需要确保我捕获票证在整个票证生命周期中处于每个状态的时间(以分钟为单位) 我对每个状态都做了下面的陈述,但由于票证在状态中来回跳转,因此无法获得正确的时间。 SELECT t.ticket_number, MIN(update_date) start_time, MAX(update_date) stop_time, DATEDIFF(second, min(update_date),max(update_date)) elapsed_sec FROM xxx.d

票证可以跳入和跳出状态,并且需要确保我捕获票证在整个票证生命周期中处于每个状态的时间(以分钟为单位)

我对每个状态都做了下面的陈述,但由于票证在状态中来回跳转,因此无法获得正确的时间。

SELECT t.ticket_number, 
MIN(update_date) start_time, MAX(update_date) stop_time,
DATEDIFF(second, min(update_date),max(update_date)) elapsed_sec 
FROM xxx.dbo.report t 
WHERE t.status= 'StopTime' 
GROUP BY t.ticket_number;
身份

关闭, 完成 新的,, 等待-1, 等待-2, 等待-3, 停车时间, 研究-1, 研究-2, 断然的, 特别要求, 打开请求, 空的

这对我来说是全新的批处理数据。。我需要帮助的是一种以分钟为单位计数的方法,票证在每个状态下的时间,以及最后的运行总数(如果可能的话)

样本数据:

'ticket_number  status  update_count    update_date
    156097  Stoptime    5               1/14/13 21:34
    164481  Stoptime    5               2/9/13 21:36
    164826  Stoptime    5               2/11/13 21:34
    165931  Stoptime    5               2/17/13 21:36
    177348  Stoptime    5               3/3/13 21:34
    179232  Stoptime    5               3/12/13 22:34
    181079  Stoptime    5               3/23/13 22:34
    258181  Stoptime    1               6/25/15 9:50
    257336  Stoptime    9               7/17/15 2:28
    245035  Closed      84              7/17/15 2:32
    259573  Closed      642             7/20/15 2:22
    245476  Closed      116             7/22/15 3:18
    251601  Closed      3               8/4/15 4:18
    251601  Closed      3               8/4/15 4:18
    259732  Closed      22              8/12/15 9:42
    264957  Closed      29              8/22/15 19:53'
预期输出示例:*票号是票号的一个不同计数,而度量的格式为(mm:ss)。谢谢!声誉不足,无法发布图像,因此无法在预期输出中显示所有状态。我道歉

Ticket  Closed  Complet New   Total Running Time (mm:ss)
156097  00:00   00:00   00:00   00:00
164481  00:00   00:00   00:00   00:00
164826  00:00   00:00   00:00   00:00
165931  00:00   00:00   00:00   00:00
177348  00:00   00:00   00:00   00:00
179232  00:00   00:00   00:00   00:00
181079  00:00   00:00   00:00   00:00
245035  00:00   00:00   00:00   00:00
245476  00:00   00:00   00:00   00:00

请参阅文档以供使用。您可以添加一个状态分组,并使用数据透视按列推送
平均值(计算的\u分钟)
值。此外,如果您熟悉SSR,那么这将是一个使用列分组组合在一起的微不足道的报告

更新

所以您不想使用PIVOT。然后,您必须使用平均值之和或票证之和手动执行此操作。我在这张票上输入了这个,不能保证它会运行,这是你正在搜索的一般概念

SELECT
    ticket_number,  
    SumStatus1=SUM(SumStatus1),
    SumStatus2=SUM(SumStatus2),
    SumStatus3=SUM(SumStatus3),
    SumAll=SUM(SumaAll)
FROM
(
    SELECT
        ticket_number,
        SumStatus1=CASE WHEN Status='status1' THEN elased_sec ELSE NULL END,
        SumStatus2=CASE WHEN Status='status2' THEN elased_sec ELSE NULL END,
        SumStatus3=CASE WHEN Status='status3' THEN elased_sec ELSE NULL EDN,
        SumaAll=elapsed_sec
    FROM
    (
        SELECT
            ticket_number,
            status,
            DATEDIFF(second, min(update_date),max(update_date)) elapsed_sec 
        FROM 
            report t
        GROUP BY 
            t.ticket_number,
            t.status    
    )AS A
)AS B
GROUP BY
    ticket_number

尝试此查询,它会实时统计每个状态并生成报告

WITH t AS (
    select 
        ticket_number,
        ISNULL(status,'null') status,
        update_date,
        row_number() OVER (PARTITION BY ticket_number ORDER BY update_date) rn
    from xxx.dbo.report
), s AS (
    SELECT 
        t1.ticket_number,
        t1.status,
        t1.update_date,
        t2.update_date prevdate,
        case when t2.status=t1.status then DATEDIFF(s, t2.update_date, t1.update_date) end dif
    FROM t t1
    LEFT JOIN t t2 ON t1.ticket_number=t2.ticket_number AND t1.rn=t2.rn+1
)
SELECT *
FROM (
    SELECT
        ticket_number,
        [status],
        cast(dateadd(s,sum(dif),0) as time(0)) [time]
    FROM s
    GROUP BY ticket_number,status )  src
PIVOT
(
  min([time])
  for [status] in ([Closed], [Complete], [New], [Waiting-1], [Waiting-2], [Waiting-3], [StopTime], [Research-1], [Research-2], [Resolved], [Special Request], [Opened Request], [null])
) piv

请提供样本数据和预期输出。上文提供了样本/预计输出。非常感谢。考虑到我缺乏SQL中批处理数据的经验,这似乎有点太难了。如果没有那么多行,我可以在excel中轻松地完成这项工作。预期输出不必与上面的类似,主要是寻找对任何有过此类数据经验的人的其他建议。谢谢lrb。这与我正在搜索的内容类似。似乎在那里的某个地方应该有一个连接。此外,是否应该有一个分组人/在等。?再次感谢-P@Panthersfball234我会采用这种方法。动态轴心是做你需要的事情的另一种方式。它似乎不起作用。看起来它可能漏掉了什么东西上面写着)作为b限制!我永远亏欠你,我的朋友!!非常感谢你!你太棒了!我怎样才能在这一页上了解你呢?迪米特里,有没有办法计算出“工作时间”和“停工时间”的总和?或者甚至是一个连续的总数?你能解释一下你所说的工作时间和停工时间是什么意思吗?它是基于各种状态还是状态之间的时间票?有某些状态会使时钟停止,例如等待时间、停止时间、,