我有一个Postgres9.1数据库,可以从表(appts)中选择以下约会日期:

id  |   apptdate
---|-----------
1   |  2017-05-01
2   |  2017-05-07
3   |  2017-05-14
4   |  2017-05-21
5   |  2017-05-28

我正试图从这个名单上取消下一个约会。
如果current_date是2017-05-05,我希望结果是2017-05-07。
如果current_date早于最后一个apptdate,则此操作有效:
SELECT apptdate FROM appts WHERE apptdate >= current_date
ORDER BY apptdate
LIMIT 1

但是,如果current_date在最后一个apptdate之后,我想选择最后一个apptdate
在上面的例子中,如果current_date是2017-06-15,我希望结果是2017-05-28。

最佳答案

select apptdate
from (
    (
        select apptdate
        from appts
        where apptdate >= current_date
        order by apptdate
        limit 1
    )
    union all

    select max(apptdate)
    from appts
) s
order by apptdate
limit 1

关于postgresql - 试图从日期列表中提取下一个约会,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43872620/

10-12 04:11