我的日期如下:2014-10-01 12:35:29.440
表格如下:
ORDER 1 | 2014-07-31 00:00:00.000
ORDER 2 | 2015-07-31 00:00:00.000
抱歉,我希望ORDER 2出现..因为我的获取日期返回今天的日期,并且大于2014-07-31 00:00:00.000
以下是我的尝试:
SELECT TOP 1 NAME
FROM ORDER_DATES
WHERE GETDATE() > ORDER_DATE
ORDER BY NAME DESC
答案 0 :(得分:1)
你的问题仍然没有以一种有利于你所需要的方式措辞......但我想我现在根据评论理解你想要的东西。
基于评论:
如果它与日期不匹配则需要返回下一行。 这是ORDER 2
这样的事情应该有效:
SELECT TOP 1 name
FROM ORDER_DATES o
INNER JOIN (
-- This subquery finds the first date that occurs *after* the current date
SELECT MIN(ORDER_DATE) AS ORDER_DATE
FROM ORDER_DATES
WHERE ORDER_DATE > GETDATE()
) minDateAfterToday ON o.ORDER_DATE = minDateAfterToday.ORDER_DATE
ORDER BY name
如果您在表格中有一个ID字段,这会更好用,但是这个 应该使用给定的数据,如果你有两个订单,你可能会遇到问题完全相同的日期。
编辑:
这是一个显示查询实际效果的小提琴:
答案 1 :(得分:0)
DATEDIFF会派上用场,您也必须按ORDER_DATE
订购:
SELECT TOP 1 NAME
FROM ORDER_DATES
WHERE DATEDIFF(DAY,ORDER_DATE,GETDATE())>0
ORDER BY ORDER_DATE DESC
答案 2 :(得分:0)
检查您是否正在查询右表
declare @dt datetime = cast('2014-10-01 12:35:29.440' as datetime), @dt2 datetime= cast('2014-07-31 00:00:00.000' as datetime);
print(case when @dt > @dt2 then 1 else 0 end);
这段脚本显示输出1,即条件应与ORDER 1匹配。
验证您是否遗漏了某些东西。
修改:
此处需要恢复条件,因为日期值将来会大于当前日期
新查询将为
SELECT TOP 1 NAME
FROM ORDER_DATES
WHERE ORDER_DATE > GETDATE()
ORDER BY NAME DESC
答案 3 :(得分:0)
你可以写成:
SELECT NAME
FROM ORDER_DATES
WHERE cast(GETDATE()as date) > cast (ORDER_DATE as date)
ORDER BY NAME DESC