【问题标题】:SQL Subtract Dates--Datetime functions invalidate querySQL 减去日期--日期时间函数使查询无效
【发布时间】:2018-04-14 09:37:52
【问题描述】:

我在使用 datetime 函数时遇到问题,到目前为止,还没有教程/问答留言板提供有效的答案:

我的目标:提取最近的订单备注是今天日期前 5 天的订单列表。订单备注日期时间填充在“create_date”列中。

我的困境:我想查找 MAX(create_date) 为 NOW()-5 天的订单。唯一能做任何事情的 datetime 函数是 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--

【问题讨论】:

  • 您的查询看起来不像 SQL Server
  • 这是 MySQL 吗?准确标记 dbms。
  • 是mysql,请把tag改成mysql
  • 感谢您的意见。我的工作只需要很少使用这个工具,而这份工作是我第一次接触它。因此,培训很少且含糊不清。我什至不知道这是 MySQL,尽管我怀疑可能是这样的问题。我已按要求更改了标签。

标签: postgresql datetime


【解决方案1】:

在适用于 Oracle、PostgreSQL 和 MySQL 的 ANSI SQL 标准中,要获取 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())

【讨论】:

  • 你刚刚拯救了我的理智。
  • 我怀疑这可能是问题所在,但没有足够深的知识库来辨别正确的语言。我的培训只是将其称为“SQL”。看起来 PostgreSQL 可能是我的问题的答案。在提供的三个选项中,只有一个有效。
  • 实际上一个标准来增加或减少日期:where create_date &lt; current_date - interval '5' day(至少在 Postgres 和 Oracle 中有效)
  • 糟糕,你是对的。我忘了它们都是 PL/ 变体(15 年没用过 Oracle)。
  • 这与“PL/ 变体”无关 - 该语法由 SQL 标准 定义(这个问题是关于 SQL,而不是 PL/SQL 或 PL/ pgSQL)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多