我从 SELECT * FROM table ORDER BY tick,refid
得到以下(简化)结果:
tick refid value
----------------
1 1 11
1 2 22
1 3 33
2 1 1111
2 3 3333
3 3 333333
请注意 refid 1(刻度线 3)和 refid 2(刻度线 2 和 3)的“缺失”行
如果可能,我如何使用该
value
的最新先前 refid
进行查询以添加这些缺失的行? “最近”表示与缺失行具有相同 refid 和最大刻度的行的值,使得刻度小于缺失行的刻度。例如tick refid value
----------------
1 1 11
1 2 22
1 3 33
2 1 1111
2 2 22
2 3 3333
3 1 1111
3 2 22
3 3 333333
附加条件:
我正在使用 MySQL,现在无法更改 db。随意以另一种方言发布答案,以帮助讨论,但我会选择 MySQL 方言中的答案而不是其他方言。
是的,我知道这可以在我已经实现的代码中完成。我只是好奇是否可以用 SQL 来完成。
最佳答案
当给定的 tick-refid 组合不存在时,应该返回什么 value
?在这个解决方案中,我只是返回了给定 refid 的最低值。
修订版
我更新了逻辑以确定在 null 的情况下使用什么值。应该注意的是,我假设 ticks+refid 在表中是唯一的。
Select Ticks.tick
, Refs.refid
, Case
When Table.value Is Null
Then (
Select T2.value
From Table As T2
Where T2.refid = Refs.refId
And T2.tick = (
Select Max(T1.tick)
From Table As T1
Where T1.tick < Ticks.tick
And T1.refid = T2.refid
)
)
Else Table.value
End As value
From (
Select Distinct refid
From Table
) As Refs
Cross Join (
Select Distinct tick
From Table
) As Ticks
Left Join Table
On Table.tick = Ticks.tick
And Table.refid = Refs.refid