今天找资料,看到一条语句:
目的:把每个用户的前100条记录提取出来
语句:
select t.* from A t where iDataId in(select top 100 iDataId from A where iPersonId=t.iPersonId order by dUseTime)效果达到了,但不知道所以然,请各位兄弟帮忙理解一下;引用地址:
http://topic.csdn.net/u/20090217/16/d2e90f06-7f90-4e16-afe4-7458f5947efe.html
目的:把每个用户的前100条记录提取出来
语句:
select t.* from A t where iDataId in(select top 100 iDataId from A where iPersonId=t.iPersonId order by dUseTime)效果达到了,但不知道所以然,请各位兄弟帮忙理解一下;引用地址:
http://topic.csdn.net/u/20090217/16/d2e90f06-7f90-4e16-afe4-7458f5947efe.html
where iDataId in(select top 100 iDataId from A where iPersonId=t.iPersonId order by dUseTime
select t.*
from A t
where iDataId in(
select top 100 iDataId
from A
where iPersonId=t.iPersonId
order by dUseTime)
---iDataId 必须为唯一值,如果不唯一的话将达不到效果
/*
select top 100 iDataId
from A
where iPersonId=t.iPersonId --把t.iPersonId 改为你想要的字符串 你就能理解了!
order by dUseTime
*/
这个我知道,我想请问,为什么一个表这样联合查询就能得到条个用户的前N条,而不用group by之类的
比如说:为什么内层的select top 100 iDataId
from A
where iPersonId=t.iPersonId
order by dUseTime这个TOP 100 一定能确定那个iDataId人集合是每个用户100条呢?
{
for (y=1;y<10;y+)
...........
}
--iDataId 必须为唯一值,如果不唯一的话将达不到效果????/既是相同也没关系啊 where iDataId in (1,1) 和where iDataId in (1) 有什么区别吗?
/*--按name分组取最小的两个(N个)val
多看看这样的写法就能明白了