我在使用datetime
功能时出现问题,到目前为止还没有任何教程/ Q&留言板提供了正常的答案:
我的目标:提取最近订单在今天日期前5天的订单列表。订单备注日期时间填充在" create_date"列。
我的困境:我想找到一个MAX(create_date)NOW()的订单 - 5天。唯一可以做任何事情的日期时间函数是NOW(),它运行得很好,但我似乎无法找到将从今天开始减去5天并实际工作的函数/语法。
这是我正常运作的查询(我知道对于经验丰富的人来说可能看起来很混乱,但我现在相对较新,现在只想要结果):
SELECT cant.*
FROM (
SELECT notes.order_number, create_date, note_text, admin_username,
ships.status
FROM ordernotes notes
JOIN shipments ships
ON notes.order_number=ships.order_number
WHERE ships.status='cant_fulfill'
AND create_date<NOW()
) cant
WHERE admin_username IN ('name','name','name','name')
AND note_text LIKE '%LTK%'
LIMIT 30
这会得到相应类型的结果,但我需要在NOW()之前的5天内过滤这些结果以找到MAX(create_date
)。我曾考虑过尝试在某处使用MAX()
函数,但如果我尝试这样做,查询就会失败。
以下是我测试的简单查询和结果的一些示例。我不知所措。
SELECT * FROM ordernotes LIMIT 10: WORKS.
SELECT MAX(create_date)FROM ordernotes LIMIT 10: WORKS
SELECT MAX(create_date), order_number, sku FROM ordernotes LIMIT 10: --FAILS--
SELECT * FROM ordernotes WHERE MAX(create_date)<NOW() LIMTI 10:--FAILS--
SELECT * FROM ordernotes WHERE MAX(create_date)='2017-10-01':--FAILS--
答案 0 :(得分:0)
在ANSI SQL标准(适用于Oracle,PostgreSQL和MySQL)中,要在5天前获取所有记录,请执行以下操作:
WHERE create_date < (NOW() - INTERVAL '5' DAY)
MySQL有一个额外的语法:
WHERE create_date < DATE_ADD(NOW(), INTERVAL -5 DAY)
MS SQL Server无法识别标准间隔,并且有自己的语法:
WHERE create_date < DATEADD(DAY, -5, GETDATE())