MySQL存储过程获取不同的计数,仅显示最新记录

时间:2013-05-10 13:04:36

标签: mysql stored-procedures count

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

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

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

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

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

这是结构:

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;

1 个答案:

答案 0 :(得分: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
    
  3. @Michael:如果我理解你的要求,请告诉我