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