|
bell6248 发表于 2016-4-21 11:40 ![]()
这种功能现实工作不太可能会用, 就像MODEL, 而且这种特性实际上就是要实现Excel的的部分的高级数据分析特性 ...
应用的场合不多,但是一旦碰到了,你就会赞叹它的强大,而且几乎没有其它方法可比拟(除了再写一段复杂的PLSQL代码)。
SQL里面要比较不同行之间的数据,就只有用分析函数把它拿到同一行,表示成不同列,然后再比较这两个列。
如果要捕捉多行之间的数据变化就傻眼了。
这个MATCH_RECOGNIZE我原来也觉得很复杂,这次通过翻译完整地学习了一遍,发现其实不然,只要掌握一些简单元素就可以写出很强大的功能。
PARTITION BY,ORDER BY都很好理解。
DEFINE 就是定义行间关系,把不同行之间的比较关系用一个模式变量来表示,这相当于你画画用的颜料。
PATTERN 就是用DEFINE里面的颜料(模式变量)来描绘这个数据变化的“图案”。
MEASURE定义的是你要什么样的输出。
比方OO说的例子,股票什么时候买入卖出赚钱最多。这其实是要出所有尽可能长的上升曲线。
这个图案表现为:有一个起点,随后是一系列的上升。
上升就是价格比前一天更高或者持平。
SELECT *
FROM Ticker MATCH_RECOGNIZE (
PARTITION BY symbol
ORDER BY tstamp
MEASURES STRT.tstamp AS low_tstamp
,STRT.price AS low_price
,LAST(UP.tstamp) AS high_tstamp
,LAST(UP.price) AS high_Price
ONE ROW PER MATCH
PATTERN (STRT UP+)
DEFINE
UP AS UP.price >= PREV(price)
) MR
ORDER BY MR.symbol, MR.low_tstamp;
|
|