select a.name , b.name, b.time from tab1 a, tab2 b where a.tid=b.tid group by a.tid order by b.time asc;

解决方案 »

  1.   

    select max(tab2.id),a.name,b.name,b.time from tab1 a,tab2 b where a.tid=b.tid group by a.tid;
      

  2.   

    问题我已经说过了,麻烦写之前先自己试验下。
    如果你写成select a.name , b.name, b.time from tab1 a, tab2 b where a.tid=b.tid group by b.tid order by b.time desc;我可能还会去试试真是。
      

  3.   

    to johnpanq(飞花逐月):你用max 只能对用这个函数的字段有效,不能针对整个记录,也就是实际上b.name,b.time仍然不是最新的。
      

  4.   

    如果以时间为准
    select max(b.time),a.name,b.name from tab1 a,tab2 b where a.tid=b.tid group by a.tid;
      

  5.   


    to johnpanq(飞花逐月):
    不是这个问题select max(b.id),a.name,b.name,b.time from tab1 a,tab2 b where a.tid=b.tid group by a.tid;
    结果:
    max( b.id )  name   name   time  
    3            分类1  例子1  2005-12-15 13:51:00 
    4            分类2  例子2  2005-12-15 13:52:00 select max(b.time),a.name,b.name from tab1 a,tab2 b where a.tid=b.tid group by a.tid;
    结果:
    name   name    max( b.time )
    分类1 例子1  2005-12-15 13:53:00
    分类2 例子2  2005-12-15 13:54:00
    而我想要的是
    分类1    例子3    2005-12-15 13:53:00
    分类2    例子4    2005-12-15 13:54:00
      

  6.   

    我要的是time 最新的的整条记录,而不是它的某个最大值
      

  7.   

    怎么又是这个问题,MYSQL手册8.3.2 拥有某个列的最大值的行
    “找出最贵的文章的编号、商人和价格”在ANSI-SQL中这很容易用一个子查询做到: SELECT article, dealer, price
    FROM   shop
    WHERE  price=(SELECT MAX(price) FROM shop)在MySQL中(还没有子查询)就用2步做到: 用一个SELECT语句从表中得到最大值。 
    使用该值编出实际的查询: 
    SELECT article, dealer, price
    FROM   shop
    WHERE  price=19.95另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到的第一行: SELECT article, dealer, price
    FROM   shop
    ORDER BY price DESC
    LIMIT 1注意:如果有多个最贵的文章( 例如每个19.95),LIMIT解决方案仅仅显示他们之一! 
      

  8.   

    8.3.4 拥有某个字段的组间最大值的行
    “对每篇文章,找出有最贵的价格的交易者。” 在ANSI SQL中,我可以用这样一个子查询做到: SELECT article, dealer, price
    FROM   shop s1
    WHERE  price=(SELECT MAX(s2.price)
                  FROM shop s2
                  WHERE s1.article = s2.article)在MySQL中,最好是分几步做到: 得到一个表(文章,maxprice)。见8.3.4 拥有某个域的组间最大值的行。 
    对每篇文章,得到对应于存储最大价格的行。 
    这可以很容易用一个临时表做到: CREATE TEMPORARY TABLE tmp (
            article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
            price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL);LOCK TABLES article read;INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;SELECT article, dealer, price FROM shop, tmp
    WHERE shop.article=tmp.articel AND shop.price=tmp.price;UNLOCK TABLES;DROP TABLE tmp;如果你不使用一个TEMPORARY表,你也必须锁定“tmp”表。 “它能一个单个查询做到吗?” 是的,但是只有使用我称之为“MAX-CONCAT诡计”的一个相当低效的诡计: SELECT article,
           SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
      0.00+LEFT(      MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
    FROM   shop
    GROUP BY article;+---------+--------+-------+
    | article | dealer | price |
    +---------+--------+-------+
    |    0001 | B      |  3.99 |
    |    0002 | A      | 10.99 |
    |    0003 | C      |  1.69 |
    |    0004 | D      | 19.95 |
    +---------+--------+-------+最后例子当然能通过在客户程序中分割连结的列使它更有效一点。 
      

  9.   

    :)
    大大们,呵呵,首先如果需要创建临时表的话,那么我想方法很多,呵呵。我也知道怎么解决。另外,子查询我是没有办法的,实际情况不允许,并且我忘了说了,还要count(b.tid), hehe 我的问题主要是希望通过简单的方法实现它。临时表不难,但是临时表很讨厌,会增加不少消耗。我想出现这个问题应该是mysql的不足吧。
    因为它在group的时候是默认的选择了第一条记录去做的group后的数据,而不能有选择性的选区,或者说不能倒序的选取,再或者是按照给定的恶某个字段的某个值得到想要的那条记录。
    本来觉得这是不是自己对它的不了解所致,其实它有这样的参数或者技巧。
    但查看了手册没有发现有这样的参数
    另外,to ice_berg16(寻梦的稻草人):
    想说点看法,不说不快。。不是针对大大你的,是针对你贴的文章的作者。

    在ANSI-SQL中这很容易用一个子查询做到:
    SELECT article, dealer, price
    FROM   shop
    WHERE  price=(SELECT MAX(price) FROM shop)
    ”很讨厌作者的这种说法,语句容不容易写并不代表它本身容易与否,毕竟它耗费了额外的资源。如果这样我还不如说想赚钱很容易,拼命去赚就是了
    呵呵,就事论事。
    个人觉得这些东西不是我能写出来就行,如果应用上有环境限制、性能限制,那么我想这些方法
    都不咋地!
    如果mysql本身支持这种选择就什么问题都没有了
      

  10.   

    mysql不能直接满足你的要求,所以手册中才会有那样的字句。
    至少mysql是承认自己的不足的,而你不是!临时表将在连接关闭时自行销毁在ANSI-SQL中这很容易用一个子查询做到:
    SELECT article, dealer, price
    FROM   shop
    WHERE  price=(SELECT MAX(price) FROM shop)

    是使用的子查询
    但是你已经说了不用子查询
    况且子查询也是需要额外的资源的,与临时表一样
      

  11.   

    呵呵,唠叨老大,也许我说话过激了,不要这么激动么。呵呵不过,“至少mysql是承认自己的不足的”,我不认同,而且我也不是针对mysql说的,
    我是觉得在group 的时候没有参数指定选择显示哪条记录这样的选项是不完善的,质疑。我只是纯粹的想通过这种方式去找到更好的办法,没别的意思,也许多了些感慨。
    呵呵。。就像能不用left join,能不用临时表,能不用子查询我都不想用,呵呵,难道这个习惯不好么?:)我认为只要写出来了就不再管它了的作法反而不太好。也许我现在懂得不多,懂得很少,但我不希望我所掌握的似是而非,大概是想知其然并且也想知其所以然吧。哈哈谢谢各位大大,
    绝对没有对大家的什么看法,
    大大们能帮我出出主意解决问题就已经很照顾新人了。呵呵,感谢感谢。
    仅仅是个人在讨论问题过于认真兼且脾气不好,呵呵。道歉道歉。
      

  12.   

    唠叨老大,那么就是说现在mysql还有这方面的不足是吧?再多问一句:对于这个问题其他数据库有没有好的办法?比如max()、 group 、select 后面 等地方带个参数什么的可以指定group后显示group中的那一条记录的信息。嘿嘿