0

我的存储过程中有以下内容,可以从具有中立派系的玩家名称中检索唯一记录:

SELECT 
   COUNT(DISTINCT Name) into @neutcount 
FROM 
   dim5players 
WHERE 
   Faction ='Neutral';

UPDATE dim5stats 
   SET Value = @neutcount 
WHERE 
   Function = 'Neutral';

这工作发现和花花公子。问题是我也有一个名为 Date 的字段。
我想从唯一的“名称”记录中选择要在计数中列出的记录的最新日期,而不是随机记录。

这是一个历史表,它记录了记录的每日变化,其中名称可以出现多次。我只需要用他们的最新记录来计算具有中立派系的最新记录。有些人不时更换派系。我只关心他们最新的派系。

这是结构:

CREATE TABLE `dim5players` (
`id` CHAR(64) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`rank_name` VARCHAR(20) NULL DEFAULT NULL,
`level` INT(11) NOT NULL,
`defender_rank_id` INT(11) NULL DEFAULT NULL,
`Faction` VARCHAR(15) NOT NULL,
`Organization` VARCHAR(100) NULL DEFAULT NULL,
`Date` DATE NOT NULL,
`Updated` BIT(1) NOT NULL,
UNIQUE INDEX `id_UNIQUE` (`id`) USING HASH,
INDEX `name_index` (`name`) USING HASH,
INDEX `date_index` (`Date`) USING HASH,
INDEX `updated_index` (`Updated`) USING HASH,
INDEX `faction_index` (`Faction`) USING HASH
       )
      COLLATE='utf8_general_ci'
      ENGINE=InnoDB;
4

1 回答 1

1

在与迈克尔讨论后,我想我知道他需要什么:

  1. “我想要每个名字的最后更新记录”

    SELECT  
        name ,
        MAX(Date) as last_date
    FROM 
        dim5players 
    WHERE 
       Faction ='Neutral'
    GROUP BY
        name
    
  2. “我只想统计每个仍然持有中立派系的NAME的最新日期”

    SELECT
        COUNT(last_date)
    FROM (
        SELECT  
            name ,
            MAX(Date) as last_date
        FROM 
            dim5players 
        WHERE 
           Faction ='Neutral'
        GROUP BY
            name
    ) as tmp
    

@Michael:如果我正确理解了您的要求,请告诉我

于 2013-05-10T15:36:35.720 回答