进一步澄清这个问题......
我有以下表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 |
我想选择所有订单,这些订单在接下来的三个可用日期内(包括当天)具有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 |
所以我假设我需要检查系统中的当前日期,搜索这个日期或下一个可用的日期然后找到接下来的两个可用日期..问题是我不知道如何这样做!
我正在寻找的是一个简单的SELECT语句,但有一些条件,但是非常感谢任何帮助,
感谢,你。 :)
答案 0 :(得分:7)
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
编辑由于对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
这意味着退回的订单将为2,3,4,7
。完全如OP所述。
答案 1 :(得分:3)
select * from ORDERS_TAB where Launch_Date in
(select Launch_Date from
(select distinct Launch_Date from ORDERS_TAB
where Launch_Date >= '2011-09-29' order by Launch_Date)
WHERE rownum <= 3)
答案 2 :(得分:0)
select * from order_tab where launch_date in
(
select launchdate
from
(
select launchdate from order_tab
where launch_date >= SysDate -- Check this
order by launch_date
) where rownum <= 3
)
看起来如何?
答案 3 :(得分:0)
编辑:正如评论所指出的,以下内容不起作用 也许去找
SELECT * FROM ORDERS_TAB WHERE LaunchDate IN (
SELECT TOP(3) LaunchDate FROM ORDERS_TAB ((possibly WHERE LaunchDate > GETDATE()?))
ORDER BY LaunchDate DESC )
答案 4 :(得分:-1)
试试这个:
SELECT * FROM ORDERS_TAB WHERE sysdate - launch_date <= 3
答案 5 :(得分:-1)
SELECT * FROM ORDERS_TAB其中Launch_Date介于'29 -sep-11'和ADDDATE之间('2007-09-01',3); 试试这个,希望这对你有帮助。