SQL SELECT QUERY - 来自两个表

时间:2018-02-12 14:41:15

标签: mysql sql sqlite

我遇到了一个关于SQL查询的难题。 请帮帮我

我有两张桌子如下。

TABLE_A                   TABLE_B
Date      Value_A         Date      Value_B
20180201   52             20180131   120
20180202   50             20180201   114
20180205   48             20180203   127
20180206   57             20180204   140
20180207   60             20180206   129

我希望得到这个结果。

Date       Value_A     PreValue_B
20180201    52          120
20180202    50          114
20180205    48          140
20180206    57          140
20180207    60          129

Date和Value_A与TABLE_A相同。 PreValue_B来自Value_B。 但它是最大值(最接近)和最大值的值。 TABLE_B的上一个日期。

因此,TABLE_B的20180201的最接近的前一个日期是" 20180131"。 ...

20180205最近的上一个日期是" 20180204",所以PreValue_B是140。

20180206是" 20180204",因此PreValue_B再次为140。 等等...

如何进行SQL查询?

感谢大家!

2 个答案:

答案 0 :(得分:2)

典型方法使用相关子查询:

select a.*,
       (select b.value
        from b
        where b.date < a.date
        order by b.date desc
        fetch first 1 row only
       ) as prevalue_b
from a;

这使用ANSI标准方法限制为一行。有些数据库会将其拼写为limitselect top 1

答案 1 :(得分:0)

试试这个:

SELECT sub.date, sub.a, b.b
FROM
(SELECT a.date, a.a, MAX(b.date) AS b_date
 FROM a
 INNER JOIN b
 ON (a.date > b.date)
 GROUP BY a.date, a.a) sub
INNER JOIN b
ON sub.b_date = b.date
ORDER BY sub.date

在子查询中,找到b中应为每个日期选择的日期。然后将结果连接回b,以显示b值。

在这里测试:http://rextester.com/ERP28040