确定错失付款的期限

时间:2018-03-29 11:15:45

标签: sql postgresql

我在找到丢失的付款时遇到了问题(从他们上一次付款的90天后通过了)和我们的数据库中涵盖的期间追加(付款超过一个月)付款。我的表格如下 贡献表(id,employees_id,starts_on,ends_on,payment_id) starts_on和ends_on定义了他们贡献的时间段(from_to) 付款表有(id,amount_pennies和paid_at"如果他们没有支付"则为null)。 我写了这个查询,以获得每个公司每个薪酬的starts_on和ends_on,并且我将最后一个paid_at和最大的付款(值)排在一起,假设它是追加付款。

  SELECT
company_id
, o.starts_on
, date_part('day', o.ends_on :: TIMESTAMP - o.starts_on :: TIMESTAMP) start_to_end
, o.ends_on
, date_part('day', o.paid_at :: TIMESTAMP - o.ends_on :: TIMESTAMP)   ends_to_paid
, o.paid_at
, date_part('day', current_date :: TIMESTAMP - o.paid_at)             paid_to_now
, rank_1
, rank_2
, amount
FROM
(
  SELECT
    p.id
    , company_id
    , min(c.starts_on)                 starts_on
    , max(c.ends_on)                   ends_on
    , max(date(paid_at))               paid_at
    , amount_pennies / 100.00          amount
    , row_number()
      OVER (
        PARTITION BY company_id
        ORDER BY max(c.ends_on) DESC ) rank_1
    , rank()
      OVER (
        PARTITION BY company_id
        ORDER BY amount_pennies DESC ) rank_2
  FROM payments p
    JOIN contributions c
      ON p.id = c.payment_id
  WHERE company_id NOT IN (
    SELECT company_id
    FROM flags
    WHERE type IN (0, 2))
  GROUP BY company_id, p.id
  ORDER BY company_id, rank_1 ASC) o

我真正需要的是,如果公司在过去三个月内结束最后一次付款,那么找到他们最后一次追加付款的starts_on和ends_on,如果他们在最后那里没有付款月份然后找到他们上次付款的starts_on和ends_on。如果不够清楚或太长,我很抱歉

1 个答案:

答案 0 :(得分:0)

缺失期是指上次付款与现付款之间的期间

stat()