2016-04-26 61 views
1

我需要通过比较2个表来生成Oracle Apex中的交互式报表。每个表格都有列:日期,标签,编号。如果日期不存在,则返回Apex中的SQL查询返回前一日期的值

表1:包含列的更改历史记录:编号并在哪个日期写入列:编号已更改。表2:同样具有列:数字和列:日期(列:显示列的不同值的日期:该月的不同日期的数字)。

当比较表1和表2之间的列“Tag_id”时生成报告 ,因此我们知道列1中的哪个值:表1中的数字是指列2中的数字。(...其中table1 .TAG = table2.tag)。

表2在列中包含日期:每月的每一天的编号, 和表1包含在列中更改的日期:每1,2,3或更多天一次的编号。

我希望报告显示来自列1的值:来自表1的数字,并显示来自列2的值:来自表2的数字,同时按列1与表2进行比较:日期。

问题是当表1中列中没有日期时:日期等于列中的日期:表2中的日期数据库不知道列的哪个值:要在生成的报告中返回的数字。

我想达到的目标: 当没有日期的比赛中的列:日期表1和表2我想在顶点生成的报告,从列返回值之间:数字从表2为 没有匹配的日期*和列的值:通过仅使用SQL查询,表1中最近的前一个日期的数字。

tables

+0

,报告结果的第一行,值VOR numberT1,不应该那是300,因为4/15/2016比* 4/11/2016更接近*到4/14/2016? –

+0

是的,但我想要最近在表1日期存在最近,不是最接近的下一个日期。 –

+0

我想到了 - 这就是我的答案应该解决的问题。我很好奇,如果它的工作:) –

回答

0

有趣的问题。我不知道有关的Apex,但如果它是Oracle的MySQL的,我会沿着路走:

SELECT 
    t2.id, 
    t2.date, 
    CASE WHEN t1.date IS NULL 
     THEN (SELECT table1.number FROM table1 WHERE table1.data <= t2.data ORDER BY table1.data DESC LIMIT 1) 
     ELSE t1.number 
    END AS numberT1, 
    t2.number as numberT2 
FROM table2 t2 
LEFT JOIN table1 t1 ON t1.date = t2.date 
在你的榜样
+0

“顶点”是没有数据库,它是一个开发工具(只是清理),并运行在Oracle数据库(不是MySQL)。话虽如此,你的语法将工作_almost_。 'LIMIT'关键字不可用,所以OP将不得不使用'ROWNUM'来限制结果 - > http://stackoverflow.com/questions/470542/how-do-i-limit-the-数 - 的 - 行,返回按一个Oracle的查询,定购后 – Tom