稍后查询首选时间

时间:2017-06-09 16:44:52

标签: sql sql-server tsql

我有一个约会安排应用程序,它为用户提供了选择首选约会时间的选项。如果没有首选时间,我们总是希望显示下一个约会。

目前我已经能够调整以下查询以返回后来的约会,如果说用户的首选时间是上午9点,并且只有上午8:30和上午9:30可用。但是,如果首选时间是上午9点,并且只有上午8:30和上午10点可用,它将在早上8:30返回,因为它更接近首选时间。我需要系统返回上午10点预约,即使上午10:30也有预约。它需要返回较晚但最接近首选时间。如果有人知道我需要如何调整我的订单来完成此操作,请告诉我。希望显示足够的信息,因为整个查询非常大。

ORDER BY ABS(DATEDIFF(n, '1/1/1900 ' + SUBSTRING(CONVERT(varchar(8), dbo.AppointmentTime, 108), 1, 5)
    , @CustomerPreferredTime)), dbo.AppointmentDateTime desc

1 个答案:

答案 0 :(得分:0)

根据问题的提问方式,我相信SqlZim的答案是正确的。问题中未指定何时应提交较早的约会的条件。我在这里采取了一种方法并假设你想要返回一个早先的约会,只有在给定的一天没有后来的约会时才会返回。该解决方案使用ROW_NUMBER函数对数据进行排序,首先是约会是在首选时间之前还是之后,然后是时差。

/var/lib/docker