【问题标题】:How to subtract two column values from two tables and insert in 3rd table如何从两个表中减去两列值并插入第三个表
【发布时间】:2020-11-10 12:45:31
【问题描述】:

我正在使用 SQlite

表 A:一列存储减值(差异)表 B:一列与 unix时间戳(OFF_time) 表 C:一列带有 unix 时间戳(ON_time)

必须分别从表 B 和 C 中减去列 OFF_time 和 ON_time 的时间戳并存储在 A 中。

这是我尝试过的:

 insert into A (difference) select B.OFF_time-C.ON_time from B,C;

[编辑]

没有错误,但是表 A 是空的并且没有更新差异。

样本数据:

表 C: ON_time

表 B: OFF_time

所需输出:表 A:

差异(表A中的列名)

622

1024

608

398

458

【问题讨论】:

  • 请提供样本数据和期望的结果。我怀疑你真的想要笛卡尔积。
  • 您的查询,虽然逻辑错误,但语法正确。因此,您在此处发布的查询似乎对此错误不负责任。检查代码中的其他地方。
  • @forpas 是的,我发现了一个错字并更改了它现在我有另一个问题:(
  • @GordonLinoff 我已经添加了示例数据和所需的结果。希望对您有所帮助。

标签: sql database sqlite subquery sql-insert


【解决方案1】:

您可以使用 ROW_NUMBER() 窗口函数来连接 B 和 C:

insert into A (difference) 
select t1.OFF_time - t2.ON_time 
from (select *, row_number() over (order by OFF_time) rn from B) t1
inner join (select *, row_number() over (order by ON_time) rn from C) t2
on t2.rn = t1.rn;

【讨论】:

  • 哇!谢谢,工作。如果你不介意,你能简单地解释一下你做了什么吗?
  • 在每个表B和C中,row_number()返回按时间排序的每一行的编号。然后根据这个数字连接 2 个查询:B 的第 1 行和 c 的第 1 行,B 的第 2 行和 c 的第 2 行,减去 2 个表的 2 列。
  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多