【发布时间】:2019-11-26 11:09:32
【问题描述】:
假设,我们有一个客户表:
client acctraction_dt status status_dt date_diff
a 21.05.2019 big 13.05.2019 8
a 21.05.2019 small 22.05.2019 -1
a 21.05.2019 medium 25.05.2019 -4
b 01.04.2019 big 13.05.2019 -42
b 01.04.2019 small 22.05.2019 -51
b 01.04.2019 medium 25.05.2019 -54
c 01.06.2019 big 13.05.2019 19
c 01.06.2019 small 22.05.2019 10
c 01.06.2019 medium 25.05.2019 7
我想通过以下逻辑来定义,一个客户在吸引之日在公司处于什么状态:
a) 如果某些客户的 date_diff 0,我们应该从我们拥有的负数日期中取 max(date_diff),即除正数外最接近吸引日期的日期。
b) 如果某个客户的 min(date_diff)
c) 如果某个客户的 min(date_diff) > 0,则应该从我们拥有的日期中取 min(date_diff),即最接近景点日期的日期。
理想的结果是:
client a - small 因为 min(date_diff) 是负数。最小日期(-1 和 -4)之间的最大日期为 -1
client b - big 因为 min(date_diff) 是负数。日期之间的最大日期(-42、-51、-54)是-42
client c - medium 因为 min(date_diff) 是正数。日期(7、10、19)之间的最小日期为 7
我多次尝试使用 min、max 和 over ... 分区,但卡住了。
非常感谢您的帮助。
【问题讨论】:
-
为什么“状态”列不够好,无法知道状态?什么公司”?期望的结果会有所帮助。
标签: sql sql-server tsql