Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
修改MySQL语句以按间隔筛选数据_Mysql_Sql - Fatal编程技术网

修改MySQL语句以按间隔筛选数据

修改MySQL语句以按间隔筛选数据,mysql,sql,Mysql,Sql,我有一个工作的MySQL语句(使用MySQL workbench),用于从一个模式中获取数据,并将其插入到另一个模式中的特定表/格式中(第一个模式是只读的) 快速描述:这是记录CSR代理的呼叫数据和呼叫时间,需要全天聚合 格式是正确的,语句正确地插入了数据,但我需要修改一些内容以适应某些参数。它现在运行的方式是,每次都插入(目标是每15分钟插入一次),但在某些扩展中可能会重复 当它每15分钟运行一次时,我需要这样说:“如果扩展/扩展ID已经存在,请将新数据添加到现有数据中,否则请为此扩展创建新记

我有一个工作的MySQL语句(使用MySQL workbench),用于从一个模式中获取数据,并将其插入到另一个模式中的特定表/格式中(第一个模式是只读的)

快速描述:这是记录CSR代理的呼叫数据和呼叫时间,需要全天聚合

格式是正确的,语句正确地插入了数据,但我需要修改一些内容以适应某些参数。它现在运行的方式是,每次都插入(目标是每15分钟插入一次),但在某些扩展中可能会重复

当它每15分钟运行一次时,我需要这样说:“如果扩展/扩展ID已经存在,请将新数据添加到现有数据中,否则请为此扩展创建新记录”。这样,如果代理1整天都在工作,他们可能会在一天中增加通话分钟数,但代理2可能会工作半天,并且只增加这些小时数

现有查询:

Insert into test.ambition_test(ExtID, Extension, Total_Talk_Time_seconds,Total_Talk_Time_minutes,Total_Outbound, Total_Inbound, Missed_Calls, Total_Calls)  
SELECT 
RESPONSIBLEUSEREXTENSIONID as ExtID
, c.extension as Extension
, sum(Duration) as Total_Talk_Time_seconds
, round(sum(Duration) / 60,2) as Total_Talk_Time_minutes
, sum(if(LEGTYPE1 = 1,1,0)) as Total_Outbound
, sum(if(LEGTYPE1 = 2,1,0)) as Total_Inbound
, sum(if(Answered = 1,0,1)) as Missed_Calls
, count(DISTINCT b.NOTABLECALLID) as Total_Calls
  FROM cdrdb.session a
  JOIN cdrdb.callsummary b
   ON a.NOTABLECALLID = b.NOTABLECALLID
     join cdrdb.mxuser c
      ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
      -- WHERE b.ts > (now() - interval 15 minute)
  GROUP BY a.RESPONSIBLEUSEREXTENSIONID
  ORDER BY Total_Talk_Time_minutes DESC
我注释掉了只从最后15分钟提取的行,但它只是模拟作业时间,它只提取最新数据,而我需要它实时添加最新数据,我将它设置为每15分钟运行一次

我如何修改它以更新现有的扩展并添加任何新的扩展,仅限于当前一天


为了澄清,如果有选择的话,我想保留每天的日终总计,每天只开始新的插入。

如果我理解正确,下面的一个将解决您的问题

Insert into test.ambition_test(ExtID, Extension, Total_Talk_Time_seconds,Total_Talk_Time_minutes,Total_Outbound, Total_Inbound, Missed_Calls, Total_Calls)  
    select * from (SELECT 
    RESPONSIBLEUSEREXTENSIONID as ExtID
    , c.extension as Extension
    , sum(Duration) as Total_Talk_Time_seconds
    , round(sum(Duration) / 60,2) as Total_Talk_Time_minutes
    , sum(if(LEGTYPE1 = 1,1,0)) as Total_Outbound
    , sum(if(LEGTYPE1 = 2,1,0)) as Total_Inbound
    , sum(if(Answered = 1,0,1)) as Missed_Calls
    , count(DISTINCT b.NOTABLECALLID) as Total_Calls
      FROM cdrdb.session a
      JOIN cdrdb.callsummary b
       ON a.NOTABLECALLID = b.NOTABLECALLID
         join cdrdb.mxuser c
          ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
          -- WHERE b.ts > (now() - interval 15 minute)
      GROUP BY a.RESPONSIBLEUSEREXTENSIONID
      ORDER BY Total_Talk_Time_minutes DESC) as tmp where (ExtID, Extension) not in (select ExtID, Extension from test.ambition_test)

谢谢你,如果我在所有正确的地方都不明白,我很抱歉。这似乎会添加任何不在表中的人,但我希望能够做到这一点,这样,如果他们的扩展已经在15分钟前的上一个作业的表中,它将使用他们的新总数以及这些新记录更新表。