我尝试运行一个简单的查询来根据一个日期计算什么是提醒(enrollment_date。)这是从注册日期开始每90天重复一次的事件,但我们的员工只需要看下一个可能的日期。因此,如果一个日期是在十二月,他们将只看到该日期,直到它通过,然后只看到该日期过后的下一个。那可能吗?我正在使用oracle sql
所有可见的是:
2015年12月12日之前
Client Next Inquiry Date
Client A December 12, 2015
2015年12月12日之后
Client Next Inquiry Date
Client A March 11 2016
它并不多,但这是我到目前为止所做的。
SELECT
client_name, enrollment_date,
CASE
WHEN CURRENT_DATE <= DATE(day, 90, nextdue_date)
答案 0 :(得分:0)
我认为您的方案仍有不少未知数,但这是一个示例(对于SQL Server),它将向您显示下一个100个90天的提醒。您可以使用CTE生成每个客户端的提醒日期列表,然后使用该列表中的MIN为每个仍然大于当前日期的客户端。
DECLARE @enroll_date DATE = '2015-12-12' --For testing
--DECLARE @enroll_reminder DATE = DATEADD(DAY, 90, @enroll_date)
;WITH cte AS (
SELECT 1 AS count_
UNION ALL
SELECT count_+1
FROM cte
WHERE count_<100
)
SELECT
'Client A'--replace with your column name
,MIN(DATEADD(DAY, 90*count_, @enroll_date)) AS test
FROM cte
--GROUP BY your_column_name
HAVING MIN(DATEADD(DAY, 90*count_, @enroll_date)) > GETDATE()
在这种情况下,下一个提醒是2016-03-11,然后当那天通过时它将显示2016-06-09,然后是2016-09-07等。
答案 1 :(得分:0)
检查这是否适合您...
由于这是Oracle(PL / SQL),因此我们无法使用TOP 1
,因此使用ROWNUM
属性。
SELECT client_name as "Client"
, enrollment_date as "Next Inquiry Date"
FROM <table_name>
WHERE enrollment_date < (SYSDATE + 90)
AND ROWNUM = 1
ORDER BY enrollment_date