Heim  >  Artikel  >  Datenbank  >  MySQL获取所有分类的前N条记录_MySQL

MySQL获取所有分类的前N条记录_MySQL

WBOY
WBOYOriginal
2016-06-01 13:00:351158Durchsuche

比如有文章表 Article(Id,Category,InsertDate),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用

SELECT A1.* 
FROM Article AS A1 
   INNER JOIN (SELECT A.Category,A.InsertDate 
         FROM Article AS A 
           LEFT JOIN Article AS B 
            ON A.Category = B.Category 
              AND A.InsertDate <= B.InsertDate 
         GROUP BY A.Category,A.InsertDate 
         HAVING COUNT(B.InsertDate) <= @N 
  ) AS B1 
  ON A1.Category = B1.Category 
    AND A1.InsertDate = B1.InsertDate 
ORDER BY A1.Category,A1.InsertDate DESC

@N 就是你要取多少条

下面是我用到了一个产品分类表中,superId是大分类,prcid是产品分类。能用SQL完成的功能就要尽量用SQL语句来完成,这既简洁又高效。

SELECT
  A1.*
FROM
  prcKx AS A1
INNER JOIN (
  SELECT
    A.superId,
    A.prcid
  FROM
    prcKx AS A
  LEFT JOIN prcKx AS B ON A.superId = B.superId
  AND A.prcid <= B.prcid
  GROUP BY
    A.superId,
    A.prcid
  HAVING
    COUNT(B.prcid) <= 7
) AS B1 ON A1.superId = B1.superId
AND A1.prcid = B1.prcid
ORDER BY
  superId,
  prcid

需求是这样的(CSDN上的一个问题):mysql中有个表:article(字段:id,type,date),type有1-10,10种类型。现在要用SQL找出每种类型中时间最新的前N个数据组成的集合。

这个问题应该有很多方法可以实现,下面就来说说在网上看到的一位高手的实现(用一条SQL语句实现的,个人感觉非常好,所以拿来和大家分享): 

select a1.* from article a1
inner join
(select a.type,a.date from article a left join article b
on a.type=b.type and a.date<=b.date 
group by a.type,a.date
having count(b.date)<=2
)b1
on a1.type=b1.type and a1.date=b1.date
order by a1.type,a1.date desc

注:上面sql语句中的2代表的就是前面提到的N。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn