我有三张桌子正在尝试加入。这三个都有以下重要的栏目:
StartTime | EndTime | ChannelCode | Data
我们会调用表live
,legacy
和backup
。
旧版和备份表以2分钟的块为压缩数据。我已经想出如何通过union和使用distinct来从这两个表中获取正确的数据。
Table live在最多1分钟的块中有未压缩的数据。
另一个进程每隔2分钟从Live中获取数据,压缩并将其置于遗留系统中。然后,在稍后的时间(可能长达23小时后),数据将按原样复制到备份。
这不太理想,但由于种种原因,我无法改变设计。
我想弄清楚该怎么做:
如何从每个表中检索上面列出的所有列,但在给定时间段内只有一个条目?
到目前为止,我有:
SELECT DISTINCT StartTime, EndTime, ChannelCode, Data
FROM (SELECT StartTime, EndTime, ChannelCode, Data
FROM Legacy
WHERE StartTime < @EndTime
UNION ALL
SELECT StartTime, EndTime, ChannelCode, Data
FROM Backup
WHERE StartTime < @EndTime
) AS Data
WHERE Data.EndTime > @StartTime
ORDER BY ChannelCode, StartTime
旧表和备份表的示例数据:
2015-03-01 04:04:39.740 | 2015-03-01 04:06:39.740 | 516 | <compressed binary data>
直播表的示例数据:
2015-03-01 04:03:39.740 | 2015-03-01 04:04:39.740 | 516 | <uncompressed binary data>
不幸的是,由于时间跨度不同,我不知道从哪里开始。任何帮助将不胜感激!