DATEDIFF结果的汇总函数

enti

我在MS SQL Server中有一张表,里面有所谓的时间表记录。

每个时间表都分配给一个用户,并有一个开始日期。开始日期时间是相应时间表生效的时间点。在该时间点之前,将使用开始日期更早的计划。

我需要编写一个查询,该查询确定日程安排的ID,该日在当天有效。

假设有用户X的以下记录,起始日期如下:

  1. 2008-11-18
  2. 2008-12-15
  3. 2009-07-02
  4. 2009-08-11

从2008-11-18到2008-12-14的有效时间表是1。从2008-12-15到2009-07-01的有效时间表是2。从2009-07-02到2009的日子。 -08-10的有效时间表是3。对于2009-08-11及以后的日子,有效的时间表是4。

DATEDIFF(day, CAST('X' AS DATETIME), startdate)计算介于X之间的天数startdate对于X=2008-12-20 10:00上面的和,它返回以下值:

  1. -32
  2. -5
  3. 194
  4. 234

为了计算时间表的开始时间,该时间在time有效X,我需要找到一条记录,该记录的DATEDIFF(day, CAST('X' AS DATETIME), startdate)返回最大值(最接近零)为负值。

为此,我编写了以下查询

SELECT startdate, MAX(DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate))
FROM schedules
WHERE (username = 'username') AND (DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate) < 0)
GROUP BY startdate, DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate)

并有望获得一个行作为一个结果。

但是,我得到了两行:

我应该如何修改查询才能获得最大负值为的一行DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate)

戈登·利诺夫(Gordon Linoff)

尝试使用topwithorder by代替:

select top 1 s.*
from schedules s
where username = 'username' and CAST('2008-12-20 10:00' AS DATETIME) >= startdate 
order by startdate;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章