刚才问了一个随机选取记录的问题,用下面的语句可以随机选取一条记录select 名称
from (select * from tb order by rand())T
group by 日期想再问下,如果日期相同记录里要随机选取两条,或指定条数,用group by似乎就不行了吧,像这样的表名称 日期
id1  22号
id2  22号
id3  22号
id4  23号
id5  23号
id6  23号
id7  24号
id8  24号
id9  24号

解决方案 »

  1.   

    增加唯一标识的字段ID
    SELECT * FROM AA A1 WHERE 2>(SELECT COUNT(*) FROM AA WHERE A1.日期=日期 AND 
    A1.ID<=ID)
      

  2.   


    select 名称
     from (select * from tb order by rand())T
     group by 日期
    结果插入有自增字段的临时表再取2条
      

  3.   

    select * from tb where 日期='22' order by rand() limit 2
    union all
    select * from tb where 日期='23' order by rand() limit 2
    union all
    select * from tb where 日期='24' order by rand() limit 2;
      

  4.   

    谢谢各位回复4#的答案主要是没有通用性,如果有N条这样的相同值(相同值的条数也未必都是3条)的记录,就不适用了1#的dx,我试着理解,在表里加入了递增字段,但还是读不懂
    A1.ID<=ID是什么意思
    2>SELECT COUNT(*) FROM AA WHERE A1.日期=日期 AND A1.ID<=ID是什么意思我试着把语句SELECT *,COUNT(*) FROM AA WHERE A1.日期=日期 AND A1.ID<=ID放到数据库里运行了一下,得到的是id 名称 日期  count(*)
    9   id9  24号  9为什么2要大于9请问我要了解哪些知识才能理解,问题很弱智,请指点下我这个菜鸟,谢谢
      

  5.   

    SELECT * FROM AA A1 WHERE 2>(SELECT COUNT(*) FROM AA WHERE A1.日期=日期 AND 
    A1.ID<=ID)
    这句我运行了得到的是选取了每个相同日期值里的一条记录,所以我改成了2>=(select....)
    这样就得到了每个相同日期值里的2条记录WWWWA在3#说的加入随机意思也不理解
    select 名称 from (select * from tb order by rand()) group by 日期
    的结果不就是不同日期的一组随机记录吗
      

  6.   

    SELECT * FROM AA A1 WHERE 2>(SELECT COUNT(*) FROM AA WHERE A1.日期=日期 AND 
    A1.ID<=ID)
    如果用这种方法  需要把表随机的插入到一张有自增id的临时表里create table temp(id int not null auto_increment parimary key,a int,b varchar(10)));
    insert into temp(a,b) select * from tb order by rand();
    SELECT * FROM temp temp WHERE 2>(SELECT COUNT(*) FROM temp WHERE A1.b=b AND 
    A1.ID<=ID)
      

  7.   


     select 名称
      from (select * from tb order by rand())T
      group by 日期
     结果插入有自增字段的临时表,再用
    SELECT * FROM AA A1 WHERE 2>(SELECT COUNT(*) FROM AA WHERE A1.日期=日期 AND 
     A1.ID<=ID)取2条