我知道这是一个简单的问题,但我仍然无法弄明白。
我想找到距离现在最近的日期。
这是我的product
表:
P_INDATE
----------
2013-11-03
2013-12-13
2013-11-13
基本上,它应该显示2013-12-13
。
我输入SELECT Max( P_INDATE) FROM product
,然后就可以了。
然后,我尝试在MIN((GETDATE()- P_INDATE))
条件下使用where
,但我失败了。
答案 0 :(得分:1)
使用MAX
和WHERE
子句以及函数GETDATE()
:
SELECT MAX(P_INDATE)
FROM product
WHERE P_INDATE < GETDATE()
以上查询为您提供了最大日期,该日期小于当前日期,您可以使用函数GETDATE()
答案 1 :(得分:1)
解决此问题的一种方法是按存储日期和当前日期之间的差异对查询进行排序,并仅采用第一行。使用abs
将允许您查找最近的日期,无论其在当前日期之前还是之后。
SELECT TOP 1 p_indate
FROM mytable
ORDER BY ABS(GETDATE() - p_indate) ASC
答案 2 :(得分:0)
假设您有一个存储数据的列,并且您希望每次只显示最近的一个,为什么不能使用
从yourtable中选择max(date),这将始终为您提供最近的日期
答案 3 :(得分:0)
如果列上有索引,最有效的方法可能有点复杂:
SELECT TOP 1 P_INDATE
FROM ((SELECT TOP 1 P_INDATE
FROM product
WHERE P_INDATE < GETDATE()
ORDER BY P_INDATE DESC
) UNION ALL
(SELECT TOP 1 P_INDATE
FROM product
WHERE P.INDATE >= GETDATE()
ORDER BY P.INDATE
)
)
ORDER BY ABS(DATEDIFF(second, P_INDATE, GETDATE()))
子查询将使用索引来获取(最多)一行早于当前日期。外ORDER BY
只需要对两行进行排序。
答案 4 :(得分:0)
你可以试试这个:
SELECT TOP(1) P_INDATE
FROM [product table]
ORDER BY CASE
WHEN DATEDIFF(day,P_INDATE,GETDATE()) < 0
THEN DATEDIFF(day,GETDATE(),P_INDATE)
ELSE DATEDIFF(day,P_INDATE,GETDATE())
END ASC