【发布时间】:2013-01-15 20:28:05
【问题描述】:
我有下表,其中包含数据:
我有以下 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 值。除非没有以前的非空值。例如,92149 列下的第 4-8 行需要为 294 而不是 Null。
还有建议?
谢谢
【问题讨论】:
-
请提供一些示例数据和期望的结果。
-
这些列是否总是要被硬编码,或者您打算让它们动态化?
-
php 正在根据用户选择的 tag_ids 构建查询。只是 tag_id 部分
-
样本数据很难给你。我从成千上万的 tag_id 中提取。不过我可以给你表格的结构。
-
我有一个可以在列级别执行的递归 CTE,但我认为最有效的方法是简单地使用光标并从底部开始并返回。
标签: sql sql-server sql-server-2008-r2 pivot