我有一些表(样本带到这里),就像这样
得分(每个分数每个月计算一次得分,特定月份为28)
Branch_cust model_date score
1 28/12/2013 4
1 28/01/2014 3
1 28/02/2014 2
1 28/03/2014 7
1 28/04/2014 3
1 28/05/2014 5
1 28/06/2014 6
2 28/12/2013 9
2 28/01/2014 10
2 28/02/2014 12
2 28/03/2014 11
2 28/04/2014 10
2 28/05/2014 7
2 28/06/2014 8
贷:
Branch_cust agreement_date
1 05-01-2014
1 29-01-2014
2 27-02-2014
2 28-02-2014
贷款:
期望的输出:
Branch_cust agreement_date loan_open_score
1 05-01-2014 4
1 29-01-2014 3
2 27-02-2014 10
2 28-02-2014 12
创建loan_open_score的逻辑:
如果agreement_date当月的日期少于" 28"然后带上协议日期前一个月的分数。 如果日期大于或等于" 28"然后将该月的分数等于协议日期的月份。
示例:在branch_cust = 1的示例数据中,agreement_date是05-01-2014 - 意思是 - 天= 5所以我需要回到2013年12月并从中获取分数。
任何帮助如何做到这一点?感谢' S。我在想"加入"然后在""的情况下减去1"但是当日期是'dd-01 -YYYY'时,我不知道如何处理这个案子。在sql-teradata。
更新:日期的列数据类型是日期。
答案 0 :(得分:0)
trunc(agreement_date,'mon') + 27
返回当月的第28个月。现在,您可以在此计算日期应用一些逻辑并加入:
case when trunc(agreement_date,'mon') + 27 > agreement_date
then add_months(trunc(agreement_date,'mon') + 27,-1)
else trunc(agreement_date,'mon') + 27
end
答案 1 :(得分:0)
另一个选择是每个协议日期获取最新的model_date并将其加入分数表。这样您就不必操纵日期。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<ul data-id="2">
<li>
<span>Item name</span>
</li>
<li>
<span>Item name 2</span>
</li>
<li>
<span>Item name 3</span>
</li>
</ul>
答案 2 :(得分:0)
select *
from scores as s
join loans as l
on l.Branch_cust =
s.Branch_cust
and l.model_date =
add_months
(
trunc(S.agreement_date,'mm')+27
,case when extract(day from s.agreement_date) < 28 then -1 else 0 end
)