【发布时间】:2011-05-23 10:25:56
【问题描述】:
我有一张这样的桌子:
USER | PLAN | START_DATE | END_DATE
1 | A | 20110101 | NULL
1 | B | 20100101 | 20101231
2 | A | 20100101 | 20100505
如果END_DATE 是null,则表示该用户当前有该计划。
我想查询的是: (a) 他目前正在实施的计划,或 (b) 他参与的最新计划。我只需要为每个给定用户返回一行。
现在,我设法通过使用联合和子查询来做到这一点,但碰巧表很大,而且效率不够高。 你们中的任何人有更快的方法来查询吗?
谢谢,
[编辑] 这里的大多数答案都返回一个值。那是我的错。我的意思是为每个用户返回一个值,但同时返回所有用户。我已经尽可能地调整了答案(并更正了问题),但只是明确说明以供将来参考。
【问题讨论】:
-
你在查询的列上有索引吗?
-
有点。我有我需要的索引并且确实改进了查询,这只是我使用的逻辑让我感到困惑......真的认为这应该是更好的方法。
-
你有关于 user 和 end_date 的复合索引吗?
标签: sql performance oracle