我有两张桌子 表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
请帮忙
答案 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