【发布时间】:2019-07-01 13:00:35
【问题描述】:
我有一个数据集,我正在尝试查询以获取折扣率。挑战在于数据集仅对可能的查询输入的一个子集持有折扣。
在某些情况下,我可以从数据中获得准确的折扣率。在其他情况下,我需要获取最接近的匹配项(更高和更低),然后从返回的数据外部计算折扣。
考虑如下的虚拟数据集:
如果我有完全匹配,那么很容易计算出折扣。例如,Freq 为 5,Duration 或 2 Order Quantity 为 50,折扣为 0.10402。
但是,如果频率为 7,持续时间为 6,订单为 50,则我需要能够返回下一个最低和下一个最高匹配行,然后独立计算实际折扣。例如:想要检索以下内容:
下一个最低值(例如:频率 5)= 0.10402 下一个最高值(例如:频率 10)= 0.31048
最后,如果我的频率和持续时间都没有完全匹配,我需要 4 个结果来独立计算折扣!例如:
折扣率:
(Low/Low) 小于的最近频率和小于的最近持续时间
(低/高)小于的最近频率和大于的最近持续时间
(高/低)最近频率大于和最近持续时间小于
(高/高)最近的频率大于和最近的持续时间大于
所以我认为我需要一个查询,该查询将返回 1 到 4 行,具体取决于提供的输入以及它们与数据的匹配程度。具体来说:
如果 Freq 和 Duration 完全匹配,则为一行。
如果(比如说)Freq 完全匹配,则为两行。第一行是下一个最低持续时间的费率,第二行是下一个最高持续时间的费率。
如果没有完全匹配,则为四行,例如:
第一行)最近的较低频率和最近的较低持续时间
第二行)最近的较低频率和最近的较高持续时间
第三行)最近的较高频率和最近的较低持续时间
第 4 行)最近的较高频率和最近的较高持续时间
希望这有点道理!有人对如何编写可以实现相同的查询有任何建议吗?尝试了很多不同的方法,但很纠结!
谢谢!
这是一个示例查询,我今天可以运行它来获得完全匹配!
select Rate from RateTable
where ProductId=34343
and ProductVariationCode='G497'
and ProductStatus=0
and Frequency=23
and Duration=4
and 100 >= MinOrder
and 100 < MinOrder
【问题讨论】:
标签: sql sql-server