我遇到了一个关于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查询?
感谢大家!
答案 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标准方法限制为一行。有些数据库会将其拼写为limit
或select 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值。