(转) MySQL、SQL SERVER获取所有分类和每个分类的前N条记录

比如有文章表 test(Id,type,tiem),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用,转自(loveyuki.com),感谢。


SELECT a1.* FROM test a1 
   INNER JOIN (SELECT a.type,a.time FROM test a 
         LEFT JOIN test b 
         ON a.type = b.type AND a.time <= b.time 
         GROUP BY a.type,a.time 
         HAVING COUNT(b.time) <= @N
   ) b1
  ON a1.type = b1.type AND a1.time = b1.time 
ORDER BY a1.type,b1.time DESC

2017-08-08 ~~~~~~~    mysql 没测试 暂时用不到记录一下//

上面语句当成sql server 语句有bug 一种分类最大时间 有两条时间一样的情况下 分类查不出来。。。。。。。。。。。。。  

(可以通过数据库主键处理:时间、分类设置主键)


sql server 语句

SELECT a1.* FROM test a1
    INNER JOIN (
SELECT t.type, MAX(t.time) time from test t GROUP BY t.type
    ) b1
    ON a1.type = b1.type AND a1.time = b1.time
    ORDER BY a1.type;


@N 就是你要取多少条。


由于项目里面用的mybatis    <=  报错  需要用到转义符


附:XML转义字符 
                     &lt;                     <                       小于号                                            
                     &gt;                    >                       大于号 
                     &amp;                &                       和 
                     &apos;                '                        单引号 
                     &quot;                 "                       双引号     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值