0

大家好,我很抱歉,但我不知道我应该如何称呼这个问题。

我有一个包含信息的表,这些信息是从创建行到最后一次更新所用的时间,这些显示在以下列中:

CREATED
LAST_UPD

它们之间的时间差显示在单独的列中,称为:

SOLVED_SEC

(时间以秒为单位)

现在我想从这个表中收集一些数据,但是如果 CREATED (这是一个日期)在我们公司的营业时间之外,SOLVED_SEC 应该在我的

我们的营业时间存在于名为 KS_DRIFT.SYS_DATE_KS 的表中。

此表有一个名为:THIS_DATE_OPENING 的列。

我在想我可以这样计算新的求解时间:

THIS_DATE_OPENING-LAST_UPD

但是我不太确定如何做到这一点

以下是我现在拥有的 SQL:

SELECT   
    TIDSPUNKT, LAST_UPD, AA.CREATED,
    TRUNC(AA.SOLVED_SEC/60/60,2) as LØST_TIME,
    //this is my attempt
    CASE 
        WHEN AA.CREATED >= CC.THIS_DATE_CLOSING 
          THEN LØST_TIME = (LAST_UPD-CC.THIS_DATE_OPENING) AS LØST_TIME 
    END,
    COUNT(CASE WHEN AA.LAST_UPD >= CC.THIS_DATE_CLOSING THEN 1 END) as AFTER_CLOSING,
    COUNT(CASE WHEN STATUS ='Færdig' THEN 1 END)as Completed_Callbacks
FROM     
    KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V AA 
INNER JOIN 
    KS_DRIFT.V_TEAM_DATO BB ON AA.TIDSPUNKT = BB.DATO 
RIGHT JOIN 
    KS_DRIFT.SYS_DATE_KS CC ON AA.TIDSPUNKT = CC.THIS_DATE
WHERE    
    AA.TIDSPUNKT BETWEEN '2012-04-01' AND '2013-04-04'
    AND AA.AFSLUTTET_AF = BB.INITIALER
GROUP BY 
    AA.TIDSPUNKT, LØST_SEKUNDER, LAST_UPD, AA.CREATED

可悲的是,这不起作用。

我的问题是,如果 CREATED > THIS_DATE_CLOSED ,如何更改 SOLVED_SEC 的值?

如果您需要更多信息,请随时发表评论。

更新

我尝试了以下方法:

CASE WHEN (AA.CREATED >= CC.THIS_DATE_CLOSING) THEN (AA.LAST_UPD-CC.THIS_DATE_OPENING) END AS SOVLED_AFTER_OPENING

但是我得到

"not a GROUP BY expression"

更新 2

我的 SQL 语句现在看起来像这样:

    SELECT   TIDSPUNKT,
         AA.CREATED,
         LAST_UPD,
         AA.AGENTGRUPPE,
         TRUNC(AA.LØST_SEKUNDER/60/60,2) as LØST_TIME,
         'LØST_TIME' = CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN DATEDIFF(ss, CC.THIS_DATE_OPENING, LAST_UPD) END,
         COUNT(CASE WHEN AA.AGENTGRUPPE not in('Hovednumre','Privatcentre','Forsikring','Hotline','Stabe','Kunder','Erhverv','NykreditKunder','Servicecentret') THEN 1 END) as CALLBACKS_OUTSIDE_OF_KS,
         COUNT(CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN 1 END) as AFTER_CLOSING,
         COUNT(CASE WHEN STATUS ='Færdig' THEN 1 END)as Completed_Callbacks
FROM     KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V AA 
         INNER JOIN KS_DRIFT.V_TEAM_DATO BB ON AA.TIDSPUNKT = BB.DATO 
         RIGHT JOIN KS_DRIFT.SYS_DATE_KS CC ON AA.TIDSPUNKT = CC.THIS_DATE
WHERE    AA.TIDSPUNKT BETWEEN '2013-04-01' AND '2013-04-04'
AND      AA.AFSLUTTET_AF = BB.INITIALER
GROUP BY AA.TIDSPUNKT, LAST_UPD, AA.CREATED, AA.LØST_SEKUNDER, 
         AA.AFSLUTTET_AF, AA.AGENTGRUPPE

但是我在预期的地方找不到 From 关键字

4

1 回答 1

3

在尝试计算时间差异时,您需要使用 DATEDIFF 函数。

例如:

SELECT DATEDIFF(ss, THIS_DATE_OPENING, LAST_UPD);

其中“ss”表示秒。第一个参数是您要计算的日期部分。比如几秒钟、几分钟或几天或其他什么。

您可以在此处找到文档http://msdn.microsoft.com/en-us/library/aa258269(v=sql.80).aspx

如果我没有正确理解您的问题,请告诉我。

我也刚刚注意到您正在尝试这样做:

CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN LØST_TIME =(LAST_UPD-CC.THIS_DATE_OPENING) AS LØST_TIME END

试试这个:

'L0ST_TIME' = CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN DATEDIFF(ss, CC.THIS_DATE_OPENING, LAST_UPD) END

高温高压

于 2013-04-04T13:41:44.250 回答