我在找到丢失的付款时遇到了问题(从他们上一次付款的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。如果不够清楚或太长,我很抱歉
答案 0 :(得分:0)
缺失期是指上次付款与现付款之间的期间
stat()