Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL选择查询-来自两个表_Mysql_Sql_Sqlite - Fatal编程技术网

Mysql SQL选择查询-来自两个表

Mysql SQL选择查询-来自两个表,mysql,sql,sqlite,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

我遇到了一个关于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
日期和值_A与表_A相同。 PreValue_B是从值_B开始的。 但它是表_B的最大最近日期和上一日期的值

因此,表_B中最近的前一日期20180201是20180131。

最近的前一个日期20180205是20180204,因此PreValue_B是140

20180206是20180204,所以PreValue_B又是140。 等等

如何进行SQL查询


谢谢大家

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

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标准方法限制为一行。有些数据库将此拼写为限制或选择top 1。

请尝试以下操作:

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中为a中的每个日期选择的日期。然后将结果合并回b,以显示b值


此处测试:

请标记您的DBMS mysql、sql server、oracle等。仅获取前1行是什么?我从未在SQL中看到过。太好了!谢谢戈登@Sir我将“获取前1行”改为“限制1”,效果很好。@b-a谢谢。但是,它是从哪里来的呢^^谢谢,我不明白什么是内在联结,但我不会忘记,很快就会学会的。