我在SQLITE中有两个表FastData
一个表以较高的速率记录数据,而另一个表SlowData
以较低的速率记录数据。FastData
和SlowData
共享一个主键(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;
pk | 值1 值 | 2 |
---|---|---|
2 | 1 | 1 |
3 | 2 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
7 | 5 | 3 |
9 | 6 | 3 |
你需要表的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;
请参阅演示。