每月帐单周期内有多个月对帐单

时间:2018-11-07 20:06:49

标签: mysql datetime group-by multiple-instances

每个部门每个月的帐单周期应该只有一个对帐单。

我的目标是找出在同一计费周期内有多个账单被打到多少个部门。

上下文:

我当前的查询设置为仅检查应该按月计费的部门。

部门表与对帐单表具有一对多关系(一个部门在每个计费周期结束时应有一个对帐单)

每个帐单都有自己的截止日期

a.payment_period = 1代表按月计费的部门

我还尝试了在每个帐户的特定到期日期之间进行搜索。

我的查询的问题是它输出帐单截止日期的总数,而不是仅检查帐单周期内是否多次出现。

如何将此查询修改为仅在每个部门的帐单周期内发生多个每月帐单实例的输出部门?

查询:

    SELECT s.department, s.statement, COUNT(s.closed_date) AS sd, from_unixtime(s.closed_date)
    FROM statement s
    INNER JOIN department d
    ON s.department=d.department
    WHERE from_unixtime(s.closed_date) BETWEEN 
    DATE_SUB(from_unixtime(d.exp_date), INTERVAL 1 MONTH) AND 
    from_unixtime(d.exp_date)  
    AND d.period=1
    GROUP BY s.statement DESC
    HAVING sd>1

样品输出:

department  statement        sd     closed_date
1719712        9351464        3     2018-09-24 
1719709        9351463        2     2018-09-24 
1719708        9351462        2     2018-09-24 
1719665        9351457        3     2018-09-24 

1 个答案:

答案 0 :(得分:0)

您似乎想按月分组。

在MySQL中,the LAST_DAY() function.是一项工作,您需要的模式是:

 SELECT a, b, LAST_DAY(datestamp) month_ending, SUM(c) c, MAX(d) maxd
   FROM table
  GROUP BY a, b, LAST_DAY(datestamp)

因此,对于您的情况,您首先要查找任何给定月份中有一张以上发票的情况。

我不得不猜测,因为我不了解exp_date的含义。这应该做您想要的。

      SELECT s.department, LAST_DAY(FROM_UNIXTIME(s.closed_date)) month_ending,
             COUNT (*) statement_count
        FROM statement s
        JOIN department d ON s.department = d.department
       WHERE d.period = 1
         AND s.closed_date >=  (FROM_UNIXTIME(d.exp)) - INTERVAL 1 MONTH
         AND s.closed_date <   (FROM_UNIXTIME(d.exp)) 
       GROUP BY s.department, LAST_DAY(FROM_UNIXTIME(s.closed_date))
       HAVING COUNT(*) > 1

这给出了一个结果集,每个部门每月有一行,并经过过滤,因此只显示具有多个发票的部门。