【发布时间】:2014-12-10 00:51:00
【问题描述】:
我正在尝试编写一个 sql 查询 (proc sql) 以从示例表中获取数据:
order_id base_order_id customer_id ==================================================== ======== 1 null 1 //只有一笔交易 -------------------------------------------------- ----------------------------------------- 2 null 1 //order_start 3 2 1 4 3 1 5 4 1 6 5 1 7 6 1 //order_end -------------------------------------------------- -----------------------------------------如下:
order_id last_order_id customer_id 1 无 1 2 7 1让我这样说。 Order_id 2 有 6 个子流程。我们可以假设该客户的完整订单包含从 2 到 7 的 order_id。订单开始 = order_id 2,因为整个订单以 order_id 7 结束。
我是 sas sql 的初学者。我尝试通过左连接,“有”子句加入同一个表,但没有任何效果。 有没有办法得到表2中的查询结果?
提前谢谢你。
编辑2。 我写的 SQL,结果最接近。
SELECT t1.order_id, t1.base_order_id as last_order_id, t1.customer_id
FROM table1 t1
GROUP BY t1.order_id
HAVING (t1.order_id = max(t1.base_order_id)
or t1.base_order_id IS NULL)
【问题讨论】:
-
我不知道使用 SQL proc SQL 的方法。但是,您可以在底层数据库中使用递归/分层功能来执行此操作。或者,通过使用 SAS 系统中的其他功能。
-
你能解释一下last_order_id是如何计算的吗?从这个例子中我并不完全清楚。
-
@JJFord3 我已经编辑了我的帖子。希望你现在更清楚了。
-
到目前为止你有什么 sql?你试过什么?
-
@GordonLinoff Gordon - 我知道你喜欢你的 SQL,所以请查看下面我的答案中的链接。附带说明一下,几年前我在拉斯维加斯与你自己和戴夫一起使用 EMiner 进行了数据挖掘的介绍。我上过的最好的课程 =)
标签: sql sas hierarchical-data