这是我的佣金表,其中某些ID有两个条目,而其他ID只有一个。如果在原始委托日期后30天内有冲销分录,则应冲销原始佣金,但是如果反向输入在30天之后,则应将其忽略。
lead_id | 佣金日期 | 佣金 |
---|---|---|
22940 | 2020年1月3日 | 30 |
22940 | 2020年3月30日 | -30 |
22941 | 30/04/2020 | 30 |
22942 | 2020年3月31日 | 60 |
22942 | 15/06/2020 | -60 |
因此,这是我想要进入的决赛桌。
lead_id | 总佣金 |
---|---|
22940 | 0 |
22941 | 30 |
22942 | 60 |
我为查询的第一部分编写的代码应该为任何Lead_id产生一行记录,同时存储佣金日期和佣金金额(如果存在)(某些ID只有一个条目,而没有反向佣金)。这是代码
WITH TAB_RN AS
(
SELECT commissions.lead_id, commissions.commission_date, commissions.commission_amount, ROW_NUMBER() OVER (PARTITION BY commissions.lead_id, commissions.commission_date) AS RN
FROM commissions
)
SELECT T1.lead_id,
T1.commission_date AS DATE1, T1.commission_amount AS amount1
T2.commission_date AS DATE2, T2.commission_amount AS amount2
FROM TAB_RN T1
LEFT JOIN TAB_RN T2 ON T1.lead_id = T2.lead_id AND T1.commission_date = T2.commission_date AND T2.RN = 2
WHERE T1.RN = 1
它应该产生这个结果
lead_id | 日期1 | 数量1 | 日期2 | 数量2 |
---|---|---|---|---|
22940 | 2020年1月3日 | 30 | 2020年3月30日 | -30 |
22941 | 30/04/2020 | 30 | ||
22942 | 2020年3月31日 | 60 | 15/06/2020 | -60 |
但是我却回来了
lead_id | 日期1 | 数量1 | 日期2 | 数量2 |
---|---|---|---|---|
22940 | 2020年1月3日 | 30 | ||
22940 | 2020年3月30日 | -30 | ||
22941 | 30/04/2020 | 30 | ||
22942 | 2020年3月31日 | 60 | ||
22942 | 15/06/2020 | -60 |
然后,我想计算日期1和日期2之间的差额,如果该差额少于30天,则金额1和金额2相等,否则仅应计入金额1。
最后,我想将该表与Commissions.company = companies.id上的companies表一起加入并按company x进行过滤
只是分解
选择佣金
select lead_id, commission_date, commission
from commissions
where commission > 0
然后将其加入有效的返还佣金
select commissions.lead_id, commissions.commission_date, commissions.commission + ret.commission as commission_total
from commissions
join (
-- returned commissions have negative value.
select lead_id, commission_date, commission
from commissions
where commsion < 0
) ret on commissions.lead_id = ret.ldead_id
and commissions.commission= ret.commission * -1
and datediff(day,ret.commission_date,comm commissions.commission_date) <=30
where commission > 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句