我查看了许多提出和回答的问题,但似乎找不到我的答案,甚至将提供的答案混杂到我的查询中 - 大多数情况下都会失败,其余的会提供垃圾结果。
请注意,这是针对 IBM DB2 v9.7 的! 不是SQL Server 或任何更新的东西。
我有一个包含准不同行的表,但没有键。根据所有字段,找到重复项的几率几乎为零,并且重复的概率随着查询中选择的字段越少而增加。在这一点上,我基本上可以接受。字段比下面列出的要多,我添加了一个键仅供参考...
伪查询
select sum(max(NumImages)) from table where Source in ('A','B') and Event='190'
桌子
Key ID NumImages Source Event
1 1 4 A 190
2 1 - - 247
3 1 2 B 190
4 1 - - 134
5 2 7 C 190
6 2 2 A 190
7 2 1 B 190
8 2 5 A 190
9 3 5 A 190
10 3 - - 247
11 3 - - 134
12 3 - - 815
13 4 2 A 190
14 4 9 A 247
15 4 5 B 190
16 4 4 B 134
参数
Source in ('A','B')
Event = '190'
NumImages is not null
(*我认为前面的参数不会发生这种情况)
输出
ID Sum
1 6
2 6
3 5
4 7
因为:
- 1 = 6; 键 1 和 3 对于事件 190 和源 A 或 B 都是最大值
- 2 = 6; 键 8(5 - 事件 190 源 A 的最大值)+ 键 7(1 - 事件 190 源 B 的最大值)。源 C(键 5)被忽略。
- 3 = 5 ; 键 9 是唯一匹配参数的值
- 4 = 7; 键 13 和 15 是唯一与事件 190 匹配的键,即使 Source 和 NumImages 具有与其他参数匹配的值。
我认为你想要多个聚合:
首先找到每个 ID-Source 组合的最大值,然后为每个 ID 求和: