Mysql计数不适用于curdate

时间:2018-02-01 12:11:10

标签: mysql

我写了一个查询,计算客户的PPPOE休息时间。在这种情况下它完美地工作 - 在输出文件中,我可以看到客户的名字以及他的PPPOE连接被丢弃的次数:

   select
   username,
   count(username) as db,
   DATE_FORMAT(acctstarttime, '%Y-%m-%d')
   from radius_db.radacct
   where DATE_FORMAT(acctstarttime, '%Y-%m-%d') = '2018-01-02'
   group by username
   order by db desc;

我试图让它自动化,所以我修改了WHERE语句,但在这种情况下,在输出中我只看到PPPOE只被删除一次而其他人没有被删除的客户。

    select
    username,
    count(username) as db,
    DATE_FORMAT(acctstarttime, '%Y-%m-%d')
    from radius_db.radacct
    where DATE_FORMAT(acctstarttime, '%Y-%m-%d') = date_format(curdate(),'%Y-%m-%d')
    group by username
    order by db desc into outfile '/var/lib/mysql-files/pppoe-"
   , DATE_FORMAT( NOW(), '%Y%m%d%m%s')
   , ".txt'";

1 个答案:

答案 0 :(得分:0)

假设您的acctstarttime列是datetime列,您可以按date()和curdate()过滤

 select
    username,
    count(username) as db,
    DATE_FORMAT(acctstarttime, '%Y-%m-%d')
    from radius_db.radacct
    where DATE(acctstarttime) =curdate()
    group by username
    order by db desc into outfile '/var/lib/mysql-files/pppoe-"
   , DATE_FORMAT( NOW(), '%Y%m%d%m%s')
   , ".txt'";

并且要小心..因为DATE_FORMAT(acctstarttime,'%Y-%m-%d')='2018-01-02'的意思是2018年1月2日而不是2018年2月1日作为curdate()