SQL减去日期 - 日期时间函数使查询

时间:2017-11-02 00:07:43

标签: postgresql datetime

我在使用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--

1 个答案:

答案 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())