每月计费周期内的多个月报表

3hvapo4f  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(318)

每个部门每个月的账单周期应该只有一张账单。

我的目标是找出有多少部门受到了不止一个部门的打击 同一计费周期内的账单。
  上下文: 
我当前的查询设置为只检查应该按月计费的部门。
部门表与报表表具有一对多关系(一个部门在每个计费周期结束时应有一个报表)
每个账单都有自己的截止日期
a、 payment\u 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
flseospp

flseospp1#

看起来你在尝试按月份分组。
在mysql中,这是一个 LAST_DAY() 功能。你需要的模式是:

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

这将提供一个结果集,每个部门每月有一行,经过过滤,因此它仅显示具有多个发票的部门。

相关问题