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 に答える