【问题标题】:SQL DateDiff SyntaxSQL DateDiff 语法
【发布时间】:2014-12-12 03:35:47
【问题描述】:

我有一个家庭作业问题,我遇到了很多麻烦......我不期待答案,我真的很想学习它。有人可以帮我解决语法吗?

问题: 对于每个销售订单,按最长订单顺序显示订单发货所需的天数,然后按销售订单编号。显示销售订单号和发货天数。包括尚未发货的订单。

到目前为止我有:

SELECT SalesOrder.SalesOrderNumber, 
DATEDIFF (d, MIN(SalesOrder.OrderDate), MAX(Shipment.ShipmentDate)) AS "DaysToShip"
FROM SalesOrder, Shipment
GROUP BY SalesOrder.SalesOrderNumber;

【问题讨论】:

  • 您缺少连接条件。
  • 您能详细说明一下吗?谢谢你的回答。
  • @JaseMcLeod 您需要包含将SalesOrder 中的行与Shipment 中的行相关联的条件。类似于FROM SalesOrder JOIN Shipment ON SalesOrder.SalesOrderNumber = Shipment.SalesOrderNumber,但替换正确的相关列名。
  • DATEDIFF() 不是普遍支持的,所以建议你为你的RDBMA 添加标签——Access、SQL Server、MySQL 还是什么?
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它

标签: sql database syntax


【解决方案1】:

有时查看查询的中间形式有助于评估它是否在某个阶段提供了正确的数据。

考虑以下查询,从您的示例中减去一些元素:

SELECT SalesOrder.SalesOrderNumber, SalesOrder.OrderDate, Shipment.ShipmentDate
FROM SalesOrder, Shipment

您应该观察此查询的结果,看看它们与您的预期有何不同。在这种情况下,您没有指出 SalesOrderShipment 是如何相关的。结果将比订单数量多得多,每个 SalesOrder 都与每个其他 Shipment 记录相关(交叉连接)。

一旦您提供了正确的连接条件并在该阶段获得了所需的结果,请尝试添加聚合(GROUP BYMINMAX)并测试您的查询形式。最后,当您确信输入正确时,添加DATEDIFF,您将获得最终查询。

【讨论】:

    【解决方案2】:
    SELECT SalesOrder.SalesOrderNumber, 
        DATEDIFF (d, MAX(SalesOrder.OrderDate), MAX(Shipment.ShipmentDate)) AS "DaysToShip"
    FROM SalesOrder, Shipment
    GROUP BY SalesOrder.SalesOrderNumber;
    

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多