SQLite 连接具有不同主键值的表



我在SQLITE中有两个表FastData一个表以较高的速率记录数据,而另一个表SlowData以较低的速率记录数据。FastDataSlowData共享一个主键(PK),表示数据捕获的时间。因此,这两个表可能如下所示:

Fast Data         Slow Data
Pk   Value1       Pk   Value2
2    1            1    1
3    2            4    2
5    3            7    3
6    4
7    5
9    6

我想创建一个 Select 语句,该语句将这两个表连接起来,用先前捕获的数据填充SlowData

Join Data         
Pk   Value1  Value2
2    1       1
3    2       1
5    3       2
6    4       2
7    5       3
9    6       3

您可以尝试以下方法,该方法使用row_number来确定与Pk相关的最新条目,因为它是执行左联接后Value2的理想条目。

SELECT 
Pk,
Value1,
Value2
FROM (
SELECT
f.Pk,
f.Value1,
s.Value2,
ROW_NUMBER() OVER (
PARTITION BY  f.Pk, f.Value1
ORDER BY s.Pk DESC
) rn
FROM
fast_data f
LEFT JOIN
slow_data s ON f.Pk >= s.Pk
) t
WHERE rn=1;
值1
pk1 值2
21
321
532
642
753
963

你需要表的LEFT连接和FIRST_VALUE()窗口函数来选择Value2

SELECT DISTINCT f.Pk, f.Value1,
FIRST_VALUE(s.Value2) OVER (PARTITION BY f.Pk ORDER BY s.Pk DESC) Value2
FROM FastData f LEFT JOIN SlowData s
ON s.Pk <= f.Pk;

请参阅演示。

最新更新