我目前使用 MySQL
作为我的数据库。
我想检索所有 12 个月内发布最多
因此,我的结果通常会给出 COUNT
的 TOP 3
主题。36 行
。 (1 月前 3 名、2 月前 3 名...等)
帖子表
CREATE TABLE IF NOT EXISTS `Post` (
`post_id` VARCHAR(16) NOT NULL,
`staff_id` INT NOT NULL,
`topic_id` INT NOT NULL,
`status_id` INT NOT NULL,
`post_title` VARCHAR(100) NOT NULL,
`post_date_time` DATETIME NOT NULL,
`description` VARCHAR(1000) NOT NULL,
`latest_update` DATETIME NULL,
`approval` INT NULL,
`approval_date` DATE NULL,
PRIMARY KEY (`post_id`),
INDEX `fk_Post_Staff(User)1_idx` (`staff_id` ASC),
INDEX `fk_Post_Topic1_idx` (`topic_id` ASC),
INDEX `fk_Post_Status1_idx` (`status_id` ASC),
CONSTRAINT `fk_Post_Staff(User)1`
FOREIGN KEY (`staff_id`)
REFERENCES `staff` (`staff_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Post_Topic1`
FOREIGN KEY (`topic_id`)
REFERENCES `Topic` (`topic_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Post_Status1`
FOREIGN KEY (`status_id`)
REFERENCES `Status` (`status_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
最佳答案
select floor(period/100) `year`, period%100 `month`, topic_id
from
(select @n := if(@m=period, @n:=@n+1, @n:=1) n, @m:=period period, topic_id
from
(select year(post_date_time)*100+month(post_date_time) period,
topic_id, count(post_id) count
from post
group by period, topic_id
order by period, count desc) t1,
(select @n:=1) tn,
(select @m:=0) tm ) t2
where n<4
可以通过写在尾部来设置数据的周期,例如
having `year` = 2015 and `month` between 1 and 6
关于mysql - 查询获取 12 个月内 TOP 3 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805225/