Tam*_* JQ 1 sql oracle where-clause
进一步澄清这个问题......
我有以下表ORDERS_TAB和一些示例信息:
|Order| Launch_Date |
| 1 | 27-Sep-11 |
| 2 | 29-Sep-11 |
| 3 | 30-Sep-11 |
| 4 | 03-Oct-11 |
| 5 | 28-Oct-11 |
| 8 | 10-Oct-11 |
| 7 | 29-Sep-11 |
Run Code Online (Sandbox Code Playgroud)
我想在接下来的三个可用日期内(包括当天)选择所有具有LAUNCH_DATE值的订单.因此,如今今天是29日至9月11日,表中的三个可用日期将是9月29日至9月30日,9月30日至11日以及03年10月3日.因此查询将返回结果:
|Order| Launch_Date |
| 2 | 29-Sep-11 |
| 3 | 30-Sep-11 |
| 4 | 03-Oct-11 |
| 7 | 29-Sep-11 |
Run Code Online (Sandbox Code Playgroud)
所以我假设我需要检查系统中的当前日期,搜索这个日期或下一个可用的日期,然后找到接下来的两个可用日期..问题是我不知道如何做到这一点!
我正在寻找的是一个简单的SELECT语句,但有一些条件但是我们非常感谢任何帮助,
谢谢.:)
SELECT
*
FROM
(
SELECT
DENSE_RANK() OVER (ORDER BY Launch_Date) available_date_index,
*
FROM
ORDERS_TAB
WHERE
Launch_Date >= TRUNC(Sysdate)
)
WHERE
available_date_index <= 3
Run Code Online (Sandbox Code Playgroud)
编辑由于关于DENSE_RANK()如何工作的混淆,这是OP的例子......
|Order| Launch_Date | Available_Date_Index
| 1 | 27-Sep-11 | <excluded by WHERE clause>
| 2 | 29-Sep-11 | 1
| 3 | 30-Sep-11 | 2
| 4 | 03-Oct-11 | 3
| 5 | 28-Oct-11 | 5
| 8 | 10-Oct-11 | 4
| 7 | 29-Sep-11 | 1
Run Code Online (Sandbox Code Playgroud)
这意味着退回的订单将是2,3,4,7.正如OP所描述的那样.