标记记录共享字段一个值,其中字段 B 值对所有字段为空



我有一个表,其中包含多个记录可以共享的字段A。

我还有另一个字段,值。

我有第三个字段 GroupLeaderFlag,该标志基于一些先前的关系,该记录共享字段 A 是该组中的核心记录,因此我可以与它们之间的值和其他字段进行进一步比较。

在某些情况下,我无法根据先前的关系为给定组标记组领导标志。

因此,我想执行一个辅助过程,使用以下规则标记组领导标志:

  • 记录共享字段 ID
  • 具有该字段 ID 的所有记录都没有 GroupLeaderFlag,即共享字段 A 的所有记录都是空的
  • 满足该条件且值最低的
  • 组中的记录(在某些情况下,两个或多个可以共享最低值,但这种情况很少见)

更新:我意识到我还有另一个字段 GroupLeaderName,对于每个字段 A 组,我将我为该组确定/标记的记录的名称/ID 存储为 GroupLeaderFlag,以便我在组中的每条记录中都有该名称/ID。

因此,这成为另一个分组字段,以获取最终没有组长组长的字段A组。

我成功运行了选择,但无法将其转换为更新:

Select fieldA,Name,Min(Value),'X' 
as GroupLeaderFlag from TableA 
where GroupLeaderName is NULL  
group by fieldA

所以基本上我需要将其转换为更新,以便我从 select 获得的输出,即字段中记录的名称一个组,该组没有 GroupLeaderFlag 和该组中的最低值以及值为"X"的临时字段更新。

更新:我发现每个字段A组自然是按值asc排序的,这使我无需提取每个组的最低值。所以我这样做了:

Update TableA as T1
Inner Join
(Select ID,GroupLeaderFlag from TableA 
group by fieldA having Count(GroupLeaderFlag )=0) as T2
On T1.ID=T2.ID set T1.GroupLeaderFlag ='X'

假设

  1. Name是唯一的(或至少在同一fieldA内)
  2. 标志列要么是'X'(查看您的示例)要么是''(空字符串)——尽管我更喜欢01

此查询将返回新组领导的姓名:

SELECT 
    fieldA,
    (SELECT Name FROM MyTable s 
     WHERE s.fieldA = n.fieldA 
     ORDER BY `Value` LIMIT 1) AS `Name`
FROM MyTable n 
GROUP BY fieldA 
HAVING MAX(GroupLeaderFlag) = ''

将其组合成UPDATE将导致

UPDATE MyTable u
JOIN (
  SELECT 
      fieldA,
      (SELECT Name FROM MyTable s 
       WHERE s.fieldA = n.fieldA 
       ORDER BY `Value` LIMIT 1) AS `Name`
  FROM MyTable n 
  GROUP BY fieldA 
  HAVING MAX(GroupLeaderFlag) = ''
) AS f USING (fieldA)
SET GroupLeaderFlag = IF(u.`Name` = f.`Name`, 'X', ''),
GroupLeaderName = f.`Name`;

概念验证:http://sqlfiddle.com/#!9/a9be4b/1

相关内容

  • 没有找到相关文章

最新更新