2016-09-22 42 views
1

我有这样的情况,即生成一些输出,并根据所属的集合,获取和索引(对于该组通用) 。然后我继续生产,并插入一些属于同一组的新值。我想为这些新记录分配该组已有的相同“标记”。我想单独使用SQL。 如下图所示,这些组是由一个元组(大陆,区域,状态)组成的,实际上,它由这些元组组成。 (表名: 'geo')使用基于组值的值填充组(使用group bys更新) - SQL - postgre

enter image description here

我怎样才能把5号抛开曼彻斯特和6一边里昂?

+0

您目前如何处理记录被插入的情况,这是第一个给定的大陆,地区,州,城市组合?在这种情况下,“组”值如何确定? –

+0

你有效地提出了一个好的观点。由于批量很小,我使用了基于python的解决方案(程序化)。但桌子将变得巨大。我会开放也重写所有的组索引,只要他们是唯一的数字小组明智的 – Asher11

回答

1

如果确定与第一插入数据,然后运行第二个查询,更新空白组号码,然后有一个选项:

UPDATE yourTable t1 
SET group = t2.group 
FROM 
(
    SELECT continent, zone, state 
      MAX(group) AS group 
    FROM yourTable 
    GROUP BY continent, zone, state 
) t2 
WHERE t1.continent = t2.continent AND 
     t1.zone  = t2.zone  AND 
     t1.state  = t2.state 

FROM子句中的内部查询发现最大group每个大陆,地区,国家组合的价值。每个group组合应该只有两种类型的值,即数字和/或NULLNULL值表示该记录是新插入的,但MAX函数将忽略该记录。

+0

感谢队友。是的,我很好,首先插入数据,因为这正是我的程序是如何建立在 – Asher11

+0

@ Asher11重新加载页面。我认为你只需要按照大陆,地区和国家进行分组。 –