私のテーブル構造は次のとおりです。
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
。
私はどこで間違っていますか?