以下是sql server中的CTE示例。我必须在KDB中进行类似的递归。 KDB是否支持递归查询或接近它的内容。目前我可以考虑创建函数并将每个递归的临时数据保存到某个东西中......
USE AdventureWorks2012; GO WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS ( SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel FROM dbo.MyEmployees WHERE ManagerID IS NULL UNION ALL SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1 FROM dbo.MyEmployees AS e INNER JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID ) SELECT ManagerID, EmployeeID, Title, EmployeeLevel FROM DirectReports ORDER BY ManagerID; GO
答案 0 :(得分:2)
我不是100%确定你要做什么,但kdb中有两个有用的递归关键字
over
和
scan
如果您只对使用的递归的最终结果感兴趣:
离。
q){x+2*y} over 2 3 5 7
32
但如果您想要每个步骤的输出,请使用scan:
离。
q){x+2*y} scan 2 3 5 7
2 8 18 32
这些都是Jeff Borror的凡人的例子。更多信息:http://code.kx.com/q/ref/control/#over