MySQL 需要有关查询的建议

标签 mysql sql select group-by greatest-n-per-group

我想从每种新闻类型中获取最新的 3 条新闻。

CREATE TABLE IF NOT EXISTS `news` (
  `news_id` int(8) NOT NULL AUTO_INCREMENT,
  `news_heading` tinytext NOT NULL,
  `news_description` text NOT NULL,
  `news_date` date DEFAULT NOT NULL,
  `news_type` tinyint(1) NOT NULL COMMENT '0- PEP|1 - MEDIA|2 - CONSULTING',
  `created_date` datetime NOT NULL,
  `modified_date` datetime NULL,
  `display` tinyint(1) NOT NULL COMMENT '0- ON | 1 -OFF',
  PRIMARY KEY (`news_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

下面的查询只会给我 1 个来自所有类型的最新消息。建议我如何从每种类型中获得前 3 名

SELECT * FROM (
SELECT * FROM  `news` 
ORDER BY  `created_date` DESC
) AS TBL
GROUP BY  `news_type`

最佳答案

试试这个:

SELECT news_id, news_heading, news_description, news_date, 
       news_type, created_date, modified_date, display
FROM (SELECT news_id, news_heading, news_description, news_date, 
             news_type, created_date, modified_date, display, 
             IF(@news_type = @news_type:=news_type, @id:=@id+1, @id:=1) AS id 
      FROM news, (SELECT @id:=1, @news_type:=0) A 
      ORDER BY news_type, created_date DESC
     ) AS A 
WHERE id <= 3;

关于MySQL 需要有关查询的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27200995/

相关文章:

mysql - SQL 代码错误

mysql聚合困难

php - MySQL:获取表的所有以名称 "ctr_"和值 1 开头的列

mysql + 导入列标题中有空格的文件 + 如何处理

php - 使用 session 更新 SQL

mysql - 在查询时将变量设置为 true 或 false mysql

mysql - 选择有很多表的情况

phpmyadmin 拒绝所有权限(Arch Linux 设置)

mysql - LIKE 子句中的 SQL 注入(inject)攻击

SQL:选择列值至少出现 N 次的行?