我正在尝试从db2数据库中的同一个表中的4个不同客户端获取相同数量的记录。我需要确保每个sql以相同的音量提取不同的行集。该表有一个18位数字作为随机生成的主键。如何确保在第一个sql中选择的记录不存在于任何其他sqls中。
答案 0 :(得分:3)
这会影响性能,但您可以使用模数:
SELECT ...
FROM table
WHERE MOD(pkey, 4) = 1 --or 2, 3, 0
您还说了一些关于具有相同结果集大小的内容,您可以使用FETCH FIRST x ROWS ONLY
来限制相同的大小。
根据问题的“原因”,可能还有其他选项 - OLAP函数,隐藏列,功能索引,视图和其他工具可能是更好的答案。 MOD很简单。
答案 1 :(得分:0)
可能你只能在这样的查询中做到这一点:
select * from (
select f1.*, rownumber() over(partition by clientid order by f1.pkey, f1.clientid) rang
from yourtable f1
where f1.clientid in (4, 8, 9, 5) --> put your client id here
) f2
where f2.rang<5 --> 5 if you want only 5 rows by client
答案 2 :(得分:-1)
Db2联盟可能是您问题的答案。这将允许针对已在一个数据库中定义的四个源数据库运行单个SQL语句。 UNION将确保数据的重复数据删除。
可以找到详细信息here