sql查询在比较当前记录日期的最大日期获取值

时间:2017-10-16 10:00:52

标签: mysql sql visual-foxpro

我有两张桌子 表1有字段

childid, ondate,       points
1        31/01/2017      50
1        28/02/2017      77
1        31/03/2017      25

表2有字段

childid,    programid,     fromdate
1              1           01/01/2017
1              2           01/03/2017

表2指明孩子在2017年1月1日至2017年3月1日的节目1中,之后他在节目2中。 所以我的结果应该是

childid, ondate,       points    Programid
1        31/01/2017      50          1
1        28/02/2017      77          1
1        31/03/2017      25          2

请帮忙

3 个答案:

答案 0 :(得分:3)

注意:这个答案适用于MySQL。

这有点棘手。我认为相关子查询是最简单的方法:

select t1.*, 
       (select t2.programid
        from table2 t2
        where t2.childid = t1.childid and
              t2.fromdate <= t1.ondate
        order by t1.ondate desc
        limit 1
       ) as programid
from table1 t1
order by t1.ondate desc;

这保证table1中任何指定日期只有一个程序(每个孩子)。

答案 1 :(得分:0)

试试这个:

SELECT t1.childid, t1.ondate, t1.points, t2.programid
FROM table1 as t1
INNER JOIN table2 as t2  on t1.chilid = t2.childid
                        and t2.fromdate <= t1.ondate;

只需使用t2.fromdate <= t1.ondate加入两个表。

答案 2 :(得分:0)

如果查询需要与VFP兼容,则可能是:

Select tb1.*, tb2.programid ;
    FROM table1 tb1 ;
    inner Join (;
    SELECT *, ;
    NVL((Select Min(fromdate) ;
    from table2 t1;
    WHERE t1.childid=t2.childid And ;
          t1.fromdate > t2.fromdate),Date(9999,12,31)) As toDate ;
    FROM table2 t2 ;
    ) tb2 ;
    ON tb1.childid = tb2.childid And ;
       tb1.ondate >= tb2.fromdate And ;
       tb1.ondate < tb2.toDate