我有一个问题。我有一个带有字段列的SQL Server 2008表。我有以下日期:
1/1/2001
5/5/2004
8/5/2009
10/7/2011
5/5/2012
1/13/2014
我希望能够显示所有日期> =当前日期(7/29/2011
)以及最大的表日期<当前的日期。在此示例中,结果将是所有日期>= 8/5/2009
。
有人可以帮我指导吗?
答案 0 :(得分:4)
select max(date) [date] from table where date < getdate()
union
select date from table where date >= getdate()
答案 1 :(得分:3)
如果我理解正确,您希望包含当前日期之前的日期。 GETDATE()将获得当前日期(随时间)。如果你没关系,那么这应该有效。否则,您可能只需解析GETDATE()
中的日期SELECT TheDate
FROM DateTable
WHERE TheDate >= (SELECT MAX(TheDate) FROM DateTable WHERE TheDate < GETDATE())
这会使所有日期大于或等于当前日期之前的最近日期。
答案 2 :(得分:0)
我不完全确定我理解,但这看起来像是相关日期之间的关系。或者还有什么我想念的东西?
答案 3 :(得分:0)
假设您的表名为DateTable并且您的字段名为TheDate,请执行以下操作:
SELECT TheDate
FROM DateTable
WHERE TheDate >= DATEADD(d, -2, GETDATE())
祝你好运!
答案 4 :(得分:0)
这取决于您正在使用的SQL服务器。例如,在postgres中,你需要像
这样的东西SELECT fields FROM table WHERE date_field >= CURRENT_DATE - 1
但是其他SQL服务器有不同的方式来指定“昨天”
答案 5 :(得分:0)
SELECT d1.*
FROM dates d1
LEFT JOIN dates d2 ON d1.Date < d2.Date AND d2.Date < GETDATE()
WHERE d2.Date IS NULL
说明:
选择不存在日期的日期,该日期早于今天且晚于正在检查的日期。
答案 6 :(得分:0)
基于松散的叙述和未知的数据类型,这里有很多猜测。
DECLARE @t TABLE(d DATE);
INSERT @t SELECT '20010101'
UNION ALL SELECT '20040505'
UNION ALL SELECT '20090805'
UNION ALL SELECT '20111007'
UNION ALL SELECT '20120505'
UNION ALL SELECT '20140113';
DECLARE @now DATE = SYSDATETIME();
WITH t AS
(
SELECT d, rn = ROW_NUMBER() OVER (ORDER BY d)
FROM @t
)
SELECT t.d
FROM t LEFT OUTER JOIN t AS x
ON t.rn = x.rn - 1
WHERE COALESCE(x.d, @now) >= @now
ORDER BY t.d;