微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

T-SQL-按最接近的日期选择并按ID分组

如何解决T-SQL-按最接近的日期选择并按ID分组

你可以试试看

DECLARE @Date DATE = '10/01/2010';

WITH cte AS
    (
    SELECT ID, LinkedID, ABS(DATEDIFF(DD, @date, DATE)) diff,
        ROW_NUMBER() OVER (PARTITION BY LinkedID ORDER BY ABS(DATEDIFF(DD, @date, DATE))) AS SEQUENCE
    FROM MyTable
    )

SELECT *
FROM cte
WHERE SEQUENCE = 1
ORDER BY ID
;

您没有说明如何处理LinkedID组中的多行代表最接近目标日期的情况。此解决方案将仅包含一行,并且在这种情况下,您不能保证包含多个有效值的哪一行。

如果要包括代表最接近值的所有行,可以在查询中用RANK()更改ROW_NUMBER()。

解决方法

从下面的数据中,我需要使用SQL Server 2005为每个链接ID选择最接近指定日期的记录:

ID     Date      Linked ID
...........................
1    2010-09-02     25
2    2010-09-01     25
3    2010-09-08     39
4    2010-09-09     39
5    2010-09-10     39
6    2010-09-10     34
7    2010-09-29     34
8    2010-10-01     37
9    2010-10-02     36
10   2010-10-03     36

因此,使用01/10/2010选择它们应返回:

1    2010-09-02     25
5    2010-09-10     39
7    2010-09-29     34
8    2010-10-01     37
9    2010-10-02     36

我知道这是有可能的,但似乎无法绕开我的头脑(必须太接近一天的结束了:P)如果有人可以帮助或朝正确的方向轻轻推一下,将不胜感激!

编辑: 另外我也遇到了这个sql以获取最接近的日期:

abs(DATEDIFF(minute,Date_Column,'2010/10/01'))

但无法弄清楚如何正确地整合到查询中…

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。