我需要做一个相当复杂的sql透视,现在我还不确定怎么做。
假设我有这样的数据
-----------------------------------------------------
| ID | UnixTimeStamp | Value |
-----------------------------------------------------
| 0 | 4000685 | 9 |
-----------------------------------------------------
| 0 | 4006250 | 2 |
-----------------------------------------------------
| 0 | 4012185 | 5 |
-----------------------------------------------------
| 0 | 4018385 | 3 |
-----------------------------------------------------
| 0 | 4030726 | 7 |
-----------------------------------------------------
| 1 | 4000685 | 23 |
我想以这样一种方式来透视,使列是最接近6000的时间戳增量,值用value列填充,并且将是滚动的。例如,上述数据将转换为:
-----------------------------------------------------------------------------
| ID | UnixTimeStamp_End | 0_Col | 6000_Col | 12000_Col |
-----------------------------------------------------------------------------
| 0 | 4000685 | Null | Null | 9 |
-----------------------------------------------------------------------------
| 0 | 4006250 | Null | 9 | 2 |
-----------------------------------------------------------------------------
| 0 | 4012185 | 9 | 2 | 5 |
-----------------------------------------------------------------------------
| 0 | 4018385 | 2 | 5 | 3 |
-----------------------------------------------------------------------------
| 0 | 4024000 | 5 | 3 | Null |
-----------------------------------------------------------------------------
| 0 | 4030726 | 3 | Null | 7 |
-----------------------------------------------------------------------------
| 1 | 4000685 | Null | Null | 23 |
什么sql查询可以做到这一点?
编辑:注意,在4024000 unixtimestamp\u端插入了null,因为没有从最接近的6000取整到4024000的unix时间戳条目,因为4018385读数和4030726读数之间有12000的间隙。
还要注意,当id改变时,pivot需要“重置”,就好像它没有看到任何过去的值一样
1条答案
按热度按时间wd2eg0qa1#
这还远远不够完美。它使用带有基本时间戳的额外表。
http://sqlfiddle.com/#!9/645e1c/2号