从两列中选择不同的值

时间:2010-06-21 17:15:23

标签: mysql aggregate-functions distinct-values

我有一个具有以下结构的表:

itemId  | direction | uid | created
133           0        17   1268497139
432           1        140  1268497423
133           0        17   1268498130
133           1        17   1268501451

我需要为两列选择不同的值 - itemIddirection,因此输出将如下所示:

itemId  | direction | uid | created
432           1        140  1268497423
133           0        17   1268498130
133           1        17   1268501451

在原始表中,我们有两行itemId - 133和direction - 0,但我们只需要其中一行具有最新创建的时间。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

使用:

SELECT t.itemid,
       t.direction,
       t.uid,
       t.created
  FROM TABLE t
  JOIN (SELECT a.itemid,
               MAX(a.created) AS max_created
          FROM TABLE a
      GROUP BY a.itemid) b ON b.itemid = t.itemid
                          AND b.max_created = t.created

您必须使用聚合(IE:MAX)获取每个itemid的最大创建值,并将其连接到表的未更改副本,以获取与每个itemid的最大创建值相关联的值。

答案 1 :(得分:1)

select t1.itemid, t1.direction, t1.uid, t1.created
from  (select t2.itemid, t2.direction, t2.created as maxdate 
       from tbl t2 
       group by itemid, direction) x
inner join tbl t1
  on  t1.itemid = x.itemid
  and t1.direction = x.direction
  and t1.created = x.maxdate