SQL可以根据范围限制交错数据吗?

时间:2016-08-23 04:47:50

标签: sql sqlite

考虑以下数据

表1

Key  Value
---  -----
A    1
B    2
C    3
D    4
E    5
F    6
G    7
H    8
I    9
J    10

表2

Q  MaxValue
-  --------
X  3
Y  6
Z  10

当表1中的值小于或等于表2中的MaxValue时,我尝试创建一个与表1和表2匹配的连接,但仅限于它们大于先前MaxValue的情况,如此

结果

Key  Value  Q  MaxValue
---  -----  -  --------
A    1      X  3
B    2      X  3
C    3      X  3
D    4      Y  6
E    5      Y  6
F    6      Y  6
G    7      Z  10
H    8      Z  10
I    9      Z  10
J    10     Z  10

在这里你看到虽然AF都符合小于或等于6(Y&#39的MaxValue)的标准,但我希望AC只与X匹配,因为它们已经符合X的标准小于3,X是先前的最大值'。

这可以在SQL中实现吗?

2 个答案:

答案 0 :(得分:1)

这不是很漂亮,但它应该适合你:

select Z.[Key], Z.Value, T2.Q, Z.MaxValue from
(
    select Y.[Key], Y.Value, Min(MaxValue) as MaxValue from 
    (
        select T1.*, T2.MaxValue from Table1 T1 cross join Table2 T2
    ) Y 
    where Y.Value <= Y.MaxValue 
    group by Y.[Key], Y.Value       
) Z 
inner join Table2 T2 on Z.MaxValue = T2.MaxValue
  • select T1.Value, T2.MaxValue from Table1 T1 cross join Table2 T2获取Value和MaxValue的所有可能组合。
  • 然后我根据ValueKey对其进行分组,并包含条件where Y.Value <= Y.MaxValue,以排除同一MaxValue重叠Value的组合}}。
  • 最后,我从Q获取原始Table2列。

答案 1 :(得分:0)

希望能帮助

GetCustomerWiseRmTransfers(function() {
    // ...everything that followed it in the $watch callback...
});