Sql server T-SQL-获取最近日期和未来最新日期
假设记录表如下Sql server T-SQL-获取最近日期和未来最新日期,sql-server,tsql,Sql Server,Tsql,假设记录表如下 ID Name AppointmentDate -- -------- --------------- 1 Bob 1/1/2010 1 Bob 5/1/2010 2 Henry 5/1/2010 2 Henry 8/1/2011 3 John 8/1/2011 3 John 12/1/2011 我想按个人检索最近的约会日
ID Name AppointmentDate
-- -------- ---------------
1 Bob 1/1/2010
1 Bob 5/1/2010
2 Henry 5/1/2010
2 Henry 8/1/2011
3 John 8/1/2011
3 John 12/1/2011
我想按个人检索最近的约会日期。因此,我需要一个查询,它将给出以下结果集
1 Bob 5/1/2010 (5/1/2010 is most recent)
2 Henry 8/1/2011 (8/1/2011 is most recent)
3 John 8/1/2011 (has 2 future dates but 8/1/2011 is most recent)
谢谢 假设您所说的“最近”是指“最近的”,如“存储日期是距离当前日期最少的天数,我们不关心它是在当前日期之前还是之后”,则应该这样做(可能需要进行简单的调试): 这将使用SQL 2005及更高版本中的row_number()函数。子查询根据规范“排序”数据,主查询选择最佳匹配 还请注意:
- 搜索基于当前日期
- 我们只计算以天为单位的差异,忽略时间(小时、分钟等)
- 如果两天是等距的(比如说,前两天和后两天),我们随机选择一天
假设我正确地理解了您的要求,即获取日期>强>最接近当前日期,无论是过去还是将来< /强>,请考虑此查询:
SELECT t.Name, t.AppointmentDate
FROM
(
SELECT Name, AppointmentDate, ABS(DATEDIFF(d, GETDATE(), AppointmentDate)) AS Distance
FROM Table
) t
JOIN
(
SELECT Name, MIN(ABS(DATEDIFF(d, GETDATE(), AppointmentDate))) AS MinDistance
FROM Table
GROUP BY Name
) d ON t.Name = d.Name AND t.Distance = d.MinDistance
如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!也许你可以按姓名使用max(AppointmentDate)组。你没有说清楚你想要什么。。。。请重新表述/扩展您的问题!另外:“Henry”在您的表格中有一个8/1/2011
约会-但是在您的输出中,您给他一个8/1/2010
(2010而不是2011)约会日期-只是一个打字错误???@Rahul:这对“John”不起作用,不过….+1是正确的答案(尽管该列被称为AppointmentDate)。菲利普斯的答案更漂亮。修复了列名。但是关于不够漂亮,我很抱歉。我生来就是这样的SQL只有它的母亲才能爱!;-)啊,太好了!您的假设是正确的,因为搜索基于当前日期。谢谢你的帮助!
SELECT t.Name, t.AppointmentDate
FROM
(
SELECT Name, AppointmentDate, ABS(DATEDIFF(d, GETDATE(), AppointmentDate)) AS Distance
FROM Table
) t
JOIN
(
SELECT Name, MIN(ABS(DATEDIFF(d, GETDATE(), AppointmentDate))) AS MinDistance
FROM Table
GROUP BY Name
) d ON t.Name = d.Name AND t.Distance = d.MinDistance