加入到同一个表的子集

时间:2013-10-23 04:05:48

标签: mysql subset self-join

我正在尝试将表连接到其自身的子集,并且遇到了麻烦。我的输入包含ID和日期,如下所示:

 2013-10-14 eca02319d91421445f82d570960c5d0c

 2013-10-15 eca02319d91421445f82d570960c5d0c

 2013-10-16 eca02319d91421445f82d570960c5d0c

 2013-10-17 eca02319d91421445f82d570960c5d0c

 2013-10-19 eca02319d91421445f82d570960c5d0c

 2013-10-21 eca02319d91421445f82d570960c5d0c

我的目标是确定每个日期的相同ID的最后一个日期,例如:

     Date          ID                                 Last Date
  2013-10-21    eca02319d91421445f82d570960c5d0c     2013-10-19

  2013-10-19    eca02319d91421445f82d570960c5d0c     2013-10-17
  etc.

使用以下SQL,我得到以下输出:

select a.Day,a.entity, b.Day from Visitor a
    LEFT OUTER JOIN Visitor b 
on a.entity = b.entity
       and b.day < a.day
where b.day is not null

 output

 2013-10-21 eca02319d91421445f82d570960c5d0c    2013-10-14

 2013-10-21 eca02319d91421445f82d570960c5d0c    2013-10-15

 2013-10-21 eca02319d91421445f82d570960c5d0c    2013-10-17

 2013-10-21 eca02319d91421445f82d570960c5d0c    2013-10-19

 2013-10-19 eca02319d91421445f82d570960c5d0c    2013-10-14

 2013-10-19 eca02319d91421445f82d570960c5d0c    2013-10-15

为每个a.day实例只获取一条记录以及按降序处理b.day需要什么?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT distinct a.date, a.id, (select d.date from data d
        where a.date > d.date AND a.id = d.id
        order by d.date desc limit 1) as last_date 
FROM data a where (select d.date from data d
        where a.date > d.date AND a.id = d.id
        order by d.date desc limit 1) is not null
ORDER by a.date desc;

SQL Fiddle