求一sql要求如下:表:tables 
字段:id      主键
      typeid  类别id
      cdate   生产时间
      ddate   出场时间
      re  备注
      
      
按typeid分组,取每组中cdate最大的那条记录,如果cdate最大的值有两条,则在这两条中取ddate最大的那条记录。
不要用over分析函数,因为数据库是mysql。
多谢!

解决方案 »

  1.   

    mysql跑到oracle来了,看来oracle得人气在上升啊
      

  2.   

    mysql已属于oralce。无限精彩,值得期待!
      

  3.   

    看见楼主发贴到oracle板块了,想问下大家,mysql和oracle的差别大吗??
      

  4.   

    呵呵 那为什么不发去MYSQL版块呢那里没人回答吗
      

  5.   

    我那天心血来潮,下了个mysql,shit,不会用
      

  6.   

    我项目现在是在oracle的环境下进行开发的,不过部长说我们这个项目定位的客户是一些小客户,所以将来要换成mysql,这样客户的花费很小,产品才有市场。所以我想问一下,这两者间的差别究竟大不大。看以后换数据库时,工作量大不。
      

  7.   

    貌似存储过程之类的差别很大,字段类型也有差别,日期函数也有差别,还有字符集的指定之类,mysql好像可以指定到某个字段采用什么字符集。说实话mysql我没用过,在java版很多人问mysql的东东,顺便查的。。
      

  8.   

    另外,定位小客户,oracle也有express版啊,不过貌似内存/CPU和存储容量都有限制。
      

  9.   

    楼主这个帖子已经被我弄的变质了,变成了讨论贴,不好意思啊。
    你的我只会用分析函数纯sql真不会。
      

  10.   


    你先按typeid分组,取每组typeid,cdate最大的记录的集合,然后从原表中用IN自己取出所有的记录。
      

  11.   

    方法一
    if existe(select count(*)
     from tables
     group by typeid,cdate
     having count(cdate)>=2)
     then 
         select b.*
         from 
         (
         select typeid,cdate,max(ddate) as ddate
         from tables
         group by table,cdate
         ) a join tables b on a.typeid=b.typeid and a.cdate=b.cdate and a.ddate=b.ddate
     else
         select b.*
         from
         (
         select typeid,max(cdate) as cdate
         from tables
         group by typeid) a join tables b on a.typeid=b.typeid and a.cdate=b.cdate方法2
    select * 
    into #aa
    from tables
    where cdate in
    (
    select max(cdate) from tables group by typeid
    )select * from #aa where ddate in (
    select max(ddate)
    from #aa 
    group by typeid
    )
      

  12.   

    SELECT * FROM tables a WHERE id IN
            (SELECT  id FROM tables WHERE typeid=a.typeid ORDER BY cdate desc,ddate desc limit 1,1)
                    ORDER BY a.id asc
      

  13.   

    SELECT *
      FROM emp a
     WHERE a.empno IN ( SELECT empno
                    FROM emp
                   WHERE  deptno = a.deptno  
                 order by  sal desc, ename desc   ) 
    这条sql在oracle中为什么不能执行,说缺失右括号,但是去掉order by字句就好了。
      

  14.   

    因为子查询条件里面有个 emp,外面有个别名a,orderby找不到你到底是要哪个表的
      

  15.   

    select b.*
    from 
    (
    select typeid,cdate,max(ddate) ddate
    from tables 
    group by typeid, cdate
    ) a, tables b
    where a.typeid = b.typeid and a.cdate=b.cdate and a.ddate = b.ddate
      

  16.   

    select * 
    into #aa
    from tables a join (select typeid,max(cdate) as cdate from tables group by typeid) b on a.typeid=b.typeid and a.cdate=b.cdate
    select *
    from #aa a join 
    (select typeid,cdate,max(ddate) from #aa group by typeid,cdate ) b on a.typeid=b.typeid and a.cdate=b.cdate
      

  17.   

    如果你的存储过程很多 很复杂。。那个时候会很痛苦的
    另外,我曾经就有过这样痛苦的经历,我想我可以提醒你一下:
    mysql 没有check (虽然有,但是是假的)
    mysql 没有序列
    mysql 以前没有事务,现在总算有了
    mysql 中没有connectby ,如果你项目中有用到类似bom 的,嘿嘿 那就开心了
    当然 mysql免费 这就是为什么无数人用它的原因 oracle每cpu 30w美金吧。。不是随便用得起的
      

  18.   

    select distinct a.*
      from alan_test a,
           (select c.typeid, c.cdate, max(c.ddate) ddate
              from alan_test c,
                   (select typeid, max(cdate) cdate from alan_test group by typeid) b
             where c.typeid = b.typeid
               and c.cdate = b.cdate
             group by c.typeid, c.cdate) d
     where a.typeid = d.typeid
       and a.cdate = d.cdate
       and a.ddate = d.ddate
       order by a.typeid ;
      

  19.   

    select id,typeid,cdate,max(ddate),re from tables where (typeid,cdate) in (select typeid,max(cdate) from tablesgroup by typeid) group by typeid;你可以自己给一下列名称了