Sql 计算日期
我有一个问题:客户名单,以及他们下一个预定的、重复的约会,即每年、每月或每季度 我拥有的表\列有:Sql 计算日期,sql,sql-server,Sql,Sql Server,我有一个问题:客户名单,以及他们下一个预定的、重复的约会,即每年、每月或每季度 我拥有的表\列有: customer customer_ID service customer_ID service_RecID Resource service_RecID Recurrence_RecID Date_Time_Start Recurrence Recurrence_RecID RecurType RecurInterval DaysOfW
customer
customer_ID
service
customer_ID
service_RecID
Resource
service_RecID
Recurrence_RecID
Date_Time_Start
Recurrence
Recurrence_RecID
RecurType
RecurInterval
DaysOfWeek
AbsDayNbr
SelectInterval
它的建模方式是,在设置日程时,日期_开始_时间是第一次再次约会发生的日期。前
Recurrence_RecID = 10
RecurType = m (could be y, or d as well for yearly or daily)
RecurInterval = 6 (if recurType = y, this would mean every 6 years)
考虑到系统每晚都会生成这些信息,我如何编写查询来计算每个客户的下一个预定约会?我最初想使用Resource.Date\u Time\u Start并循环直到变量nextAppoint>=today(),但在SQL中运行循环是一种好的做法吗
如果需要更多信息,请告诉我。多谢各位
编辑:我将制作一个SQLFIDLE。我建议使用子查询而不是循环查询。这样更有效。这可能不准确,但有点像
SELECT
*
FROM
(
SELECT
customer.customer_id,
service.service_RecID,
Resource.Date_Time_Start,
Recurrence.Recurrence_RecID,
RecurType,
RecurInterval,
DaysOfWeek,
AbsDayNbr,
SelectInterval,
NextAppointmentDate=
CASE
WHEN RecurType='m' THEN DATEADD(MONTH,RecurInterval,Resource.Date_Time_Start)
WHEN RecurType='y' THEN DATEADD(YEAR,RecurInterval,Resource.Date_Time_Start)
ELSE
NULL
END
FROM
Recurrence
INNER JOIN Resource ON Resource.Recurrence_RecID=Recurrence.Recurrence_RecID
INNER JOIN service ON service.service_RecID=Resource.service_RecID
INNER JOIN customer ON customer.customer_ID=service.customerID
)AS X
WHERE
NextAppointmentDate>=GETDATE()
ORDER BY Fields...
你能做一个sqlfiddle吗?所以在RecurType中的“d”意味着“季度”?你可以通过记录用户最后一次预约的日期来简化你的生活,所以你只需要处理添加一个定期间隔的问题。您可能需要资源表中的第二列来记录第一次和最新的约会。