select * from video group by type order by time asc limit 0,10;
SELECT * FROM video t WHERE 10 > (SELECT COUNT( * ) FROM video WHERE type=t.type AND id<t.id ) ORDER BY time
他要按time排序选,而且应该是倒序(虽然他没说),所以我猜是SELECT * FROM video t WHERE 10 > ( SELECT COUNT( * ) FROM video WHERE type=t.type AND time>t.time ) ORDER BY type, time desc
有这么个例子 查询EMP 员工表下每个部门工资前二名的员工信息select deptno, ename, sal from emp e1 where (select count(1) from emp e2 where e2.deptno=e1.deptno and e2.ename!=e1.ename and e2.sal>e1.sal) <2 order by deptno, sal desc;楼主看看思路是不是一致
感谢回复,开始还是没完全理解,专门建了一个表,执行了下看看,基本明白了 可能改成这样会更好理解下 SELECT * FROM video t WHERE ( SELECT COUNT( * ) FROM video WHERE type=t.type AND ttime>t.ttime ) <10 ORDER BY type, ttime desc就是说从表的第一行开始,以当前行为基准,查找所有同类型的,并且时间比当前行新的记录数,看是否小于10,如果大于等于10,那说明当前行不在同类型的最新10条记录之内,就不是我们要的数据,反之,如果小于10,说明,当前行也在同类型的最新的10条记录之内,就是我们需要的数据,应该是这样的吧。
SELECT * FROM video t WHERE 10 > (SELECT COUNT( * ) FROM video WHERE type=t.type AND id<t.id ) ORDER BY time
FROM video t
WHERE 10 > (
SELECT COUNT( * )
FROM video
WHERE type=t.type
AND time>t.time
)
ORDER BY type, time desc
哦。看懂了。每种 type ? 的我不会写。
坐等高手。
查询EMP 员工表下每个部门工资前二名的员工信息select deptno, ename, sal
from emp e1
where
(select count(1)
from emp e2
where e2.deptno=e1.deptno and e2.ename!=e1.ename and e2.sal>e1.sal)
<2
order by deptno, sal desc;楼主看看思路是不是一致
看和这行同一类型(type=t.type)的行中,
比本行新(time>t.time)的是否小于10个( 10>...count(*) ),
如果小于10个,就是"每种type的前10个记录",否则,就不是
感谢回复,开始还是没完全理解,专门建了一个表,执行了下看看,基本明白了
可能改成这样会更好理解下
SELECT *
FROM video t
WHERE (
SELECT COUNT( * )
FROM video
WHERE type=t.type
AND ttime>t.ttime
) <10
ORDER BY type, ttime desc就是说从表的第一行开始,以当前行为基准,查找所有同类型的,并且时间比当前行新的记录数,看是否小于10,如果大于等于10,那说明当前行不在同类型的最新10条记录之内,就不是我们要的数据,反之,如果小于10,说明,当前行也在同类型的最新的10条记录之内,就是我们需要的数据,应该是这样的吧。