我有下表w / data:
我有以下sql查询来操作数据,使用相同的unix_timestamp对所有数据进行分组以使用图形api(时间轴):
select * from
(
select unix_timestamp, date_time, input_raw, tag_id
from [200030].[dbo].inputs
WHERE inputs.date_time > dateadd(day,-1,getdate())
AND
(tag_id = 92084 OR tag_id = 92106 OR tag_id = 92127 OR tag_id = 92149 OR tag_id = 92164 OR tag_id = 92193 OR tag_id = 92215)
) src
pivot
(
max(input_raw)
for tag_id in ([92084], [92106], [92127], [92149], [92164], [92193], [92215])
) piv
ORDER by unix_timestamp DESC
它给了我这些结果(编号的列名来自原始表的tag_id字段:
这很好接受我在查询中还需要一件事。我需要在编号列下的条目是最后一个非Null值。除非之前没有非Null。例如,列92149下的第4-8行需要是294而不是Null。
和建议?
由于
答案 0 :(得分:1)
问题基本上是你在时间戳上“丢失”了数据,因为一次只有一个标签进来。一种方法是填写缺失的数据。
此查询获取时间戳和标记的所有组合,然后在枢轴之前获取最新的input_raw值。该查询使用相关的子查询。
select unix_timestamp, date_time, tag_id,
coalesce(input_raw,
(select top 1 input_raw
from inputs i
where i.tag_id = tags.tag_id and
i.unix_timestamp < tags.unix_timestamp
order by unix_timestamp
)
) as input_raw
from (select 92084 as tag_id union all
select 92106 union all select 92127 union all select 92149 union all
select 92164 union all select 92193 union all select 92215
) tags cross join
(select distinct unix_timestamp, datetime, input_raw
from [200030].[dbo].inputs
WHERE inputs.date_time > dateadd(day,-1,getdate())
) t left outer join
[200030].[dbo].inputs i
on i.tag_id = tags.tag_id and
i.unix_timestamp = tags.unix_timestamp and
i.datetime = tags.datetime
WHERE inputs.date_time > dateadd(day,-1,getdate())
这将取代您的内部子查询。