【问题标题】:SQLite Join Tables With Different Primary Key Values具有不同主键值的 SQLite 连接表
【发布时间】:2022-01-13 18:30:25
【问题描述】:

我在 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

【问题讨论】:

  • 我目前最好的就是使用左连接Select FastData.PK, FastData.Value1, Slowdata.Value2From FastDataLeft Join SlowData ON FastData.PK = SlowData.PKOrder By FastData.PK

标签: database sqlite


【解决方案1】:

您可以尝试以下方法,该方法使用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 Value1 Value2
2 1 1
3 2 1
5 3 2
6 4 2
7 5 3
9 6 3

View working demo on DB Fiddle

【讨论】:

    【解决方案2】:

    您需要一个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;
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多