用于Vicidial

时间:2015-11-20 04:11:36

标签: php mysql

我为一家致力于技术支持的呼叫中心工作,我们的拨号器使用MySQL编写的过滤器。我是一个完整的新手,无论我尝试多少教程,都无法绕过它。

我在手册中找到的唯一例子是:

called count >= 7

这只会在7次或更多次尝试时调用潜在客户。

上述语法会对SELECTWHERE语句进行编辑,因为显然过滤器只是附加到标准查询的WHERE语句。

我们有一个名为entry_date的字段,格式为11/17/2015 9:48:16 AM(与我们所有的日期条目一样)我试图按当前日期超过30天的结果进行过滤。

我试过

entry_date - NOW() >= 30

它不起作用:(

非常感谢任何帮助。

赖安

5 个答案:

答案 0 :(得分:2)

以下是VICIdial过滤器的一个真实示例,该过滤器用于防止NI(Not Interested)状态线索在最后一次通话后的30天内被dialed阻止:

( ( (status='NI') and (last_local_call_time < CONCAT(DATE_ADD(CURDATE(), INTERVAL -30 DAY),' ',CURTIME()) ) ) or (status != 'NI') )

答案 1 :(得分:1)

如果日期格式存在于您指定的数据库中,则可能会出现问题。如果entry_date是日期时间字段,则以下内容将在过去30天内选择。

entry_date > NOW() - INTERVAL 30 DAY

答案 2 :(得分:1)

是的,好吧,mysql日期函数有点奇怪。以下是计算过去30天的日期的方法:

mysql> select DATE_SUB(CURDATE(), INTERVAL 30 day) as past;
+------------+
| past       |
+------------+
| 2015-10-20 |
+------------+

我想您需要将entry_date字段的时间戳转换为没有时间的简单日期,如下所示:

DATE(entry_date)

所以我猜想要获得超过30天的所有记录将是:

DATE(entry_date) < DATE_SUB(CURDATE(), INTERVAL 30 day)

答案 3 :(得分:0)

正如@Sean所建议的那样,MySQL日期时间格式为yyyy-mm-dd hh:mm:ss 因此,您首先必须使用STR_TO_DATE函数

来转换日期时间MySQL日期时间
STR_TO_DATE(entry_date, '%Y-%m-%d');

然后使用DATE_SUB功能,您可以找到当前日期的最后30天

DATE_SUB(CURDATE(),INTERVAL 30 DAY)

所以,你的情况将是

STR_TO_DATE(entry_date, 'Y-m-d') < DATE_SUB(CURDATE(),INTERVAL 30 DAY)

请参阅MySQL Date and Time Functions以获取进一步的参考。

答案 4 :(得分:0)

如果您要拨打过去30天未拨打的电话,请尝试。

export class AppComponent  {
  data = [
    { state: 'MN', county: '1', item: 0.297 },
    { state: 'MN', county: '1', item: 0.04 },
    { state: 'MN', county: '3', item: 0.14 },
    { state: 'CA', county: '2', item: 0.019 },
    { state: 'MN', county: '1', item: 0.0374 }, 
    { state: 'CA', county: '2', item: 0.037 },
    { state: 'CA', county: '3', item: 0.14 }
  ];

  dataExt: any[] = [];

  constructor() {
    this.processData();
  }

  private processData() {
    const statesSeen = {};
    const countiesSeen = {};

    this.dataExt = this.data.sort((a, b) => {
      const stateComp = a.state.localeCompare(b.state);
      return stateComp ? stateComp : a.county.localeCompare(b.county);
    }).map(x => {
      const stateSpan = statesSeen[x.state] ? 0 :
        this.data.filter(y => y.state === x.state).length;

      statesSeen[x.state] = true;

      const countySpan = countiesSeen[x.state] && countiesSeen[x.state][x.county] ? 0 :
        this.data.filter(y => y.state === x.state && y.county === x.county).length;

      countiesSeen[x.state] = countiesSeen[x.state] || {};
      countiesSeen[x.state][x.county] = true;

      return { ...x, stateSpan, countySpan };
    });
  }
}