0

私のテーブル構造は次のとおりです。

CREATE TABLE `scores` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `nick` VARCHAR(32) NOT NULL,
    `count` SMALLINT(5) UNSIGNED ZEROFILL NOT NULL DEFAULT '00000',
    `messages` SMALLINT(5) UNSIGNED ZEROFILL NOT NULL DEFAULT '00000',
    `dated` DATE NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `nick_dated` (`nick`, `dated`),
    INDEX `nick` (`nick`),
    INDEX `count` (`count`),
    INDEX `messages` (`messages`)
)
COMMENT='Chat scores'
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

nickのユーザー入力値に対して、ユーザーの次の値を生成できるように、クエリを作成したいと考えています。

  • 総数
  • 平均回数
  • 直近の 1 日のカウント
  • 最高カウント日

私が書いたクエリは次のとおりです。

SELECT s.`nick` AS `nick`,
    s.`count` AS `recent`,
    t.`total` AS `total`,
    t.`avrg` AS `avrg`,
    MAX(ss.`count`) AS `max`,
    ss.dated
FROM (
    SELECT `nick`,
        SUM(`count`) AS `total`,
        AVG(`count`) AS `avrg`,
        MAX(`dated`) AS `dated` # For most recent activity
    FROM `scores`
    WHERE `nick` = 'hjpotter92'
) AS `t`
INNER JOIN scores s
    ON s.nick = t.nick
        AND s.dated = t.dated
INNER JOIN scores ss
    ON ss.nick = t.nick

最初の 3 つの必須値を選択できます。しかし、どうすれば活動が最も活発な日付を取得できるでしょうか。ここにsqlfiddleがあります。フィドル DDL でわかるように、24 行目

INSERT INTO `scores` 
    (`count`, `nick`, `dated`) 
VALUES 
    (00052, 'hjpotter92', '2013-07-29');

カウントが最大の日付 ( MAX(ss.count)52 として正しく取得) は です2013-07-29が、私の選択クエリは me を返しますJuly, 26 2013

私はどこで間違っていますか?

4

1 に答える 1