我有一个SQL表,其中包含一个ID列和一个交互列。 我想创建两个具有每个ID的新SQL表,但我想将交互分成两半。因此,两个新表都将具有旧表中的每个ID。例如,对于ID 1,交互10231232202将进入一个表,交互890890834939将进入另一表。我忽略了互动少于10次的实例。 我到底该怎么做?
╔════╦═══════════════╗
║ ID ║ Interaction ║
╠════╬═══════════════╣
║ 1 ║ 10231232202 ║
║ 1 ║ 890890834939 ║
║ 3 ║ 329489023849 ║
║ 5 ║ 345453202389 ║
║ 3 ║ 012340382448 ║
╚════╩═══════════════╝
预期结果
新表1
╔════╦═══════════════╗
║ ID ║ Interaction ║
╠════╬═══════════════╣
║ 1 ║ 10231232202 ║
║ 5 ║ 345453202389 ║
║ 1 ║ 890890834939 ║
╚════╩═══════════════╝
新表2
╔════╦═══════════════╗
║ ID ║ Interaction ║
╠════╬═══════════════╣
║ 3 ║ 329489023849 ║
║ 3 ║ 012340382448 ║
╚════╩═══════════════╝
答案 0 :(得分:0)
您可以生成一个列,其拆分方式为:
select t.*,
row_number() over (partition by id order by interaction) % 2 as which_file
from t;
请注意,它对模运算符使用%
。在某些数据库中,其拼写为mod()
或mod
(作为中缀运算符)。
将数据放入单独的表中需要额外的工作-取决于数据库。