【问题标题】:I need couple of queries with DATEDIFF我需要几个 DATEDIFF 查询
【发布时间】:2013-11-25 02:11:30
【问题描述】:

1.) 列出迄今为止收到的每家酒店的收入,即 DepartureDate

到目前为止,我已经尝试过了,但它不正确,并且给我 DateDiff 语句的聚合函数错误

SELECT ROOM.HotelNo, DateDiff("d", [ArrivalDate], [DepartureDate]) *  ROOM_TYPE.RoomRate AS TotalRevenue
FROM RESERVATION, ROOM_TYPE, ROOM
WHERE ROOM.RoomType = ROOM_TYPE.RoomType
AND RESERVATION.RoomNo = ROOM.RoomNo
AND DepartureDate > Now()
GROUP BY ROOM.HotelNo;

这里是你可以看到表格的链接

RelationShip Table

请帮我解决这个问题

【问题讨论】:

  • 实际错误是什么?您是否尝试过 DATEDIFF([DepartureDate],[ArrivalDate]) 似乎 mysql DATEDIFF 需要 2 个参数并返回天数。此外,您当前的订单将返回负值。另外,为什么不在查询中使用 JOIN 语句?
  • 我在 where 语句之后加入三个表
  • 实际错误是“您的查询不包括指定的表达式 'DateDiff("d", [ArrivalDate], [DepartureDate])*ROOM_TYPE.RoomRate' 作为聚合函数的一部分。

标签: sql ms-access datediff


【解决方案1】:

使用DateDiff() 表达式中的Sum() 来避免“不包括指定的表达式...作为聚合函数的一部分” 抱怨。

SELECT
    ROOM.HotelNo,
    Sum(
        DateDiff(
                "d",
                [ArrivalDate],
                [DepartureDate]
            ) * ROOM_TYPE.RoomRate
        ) AS TotalRevenue

WHERE 子句包括DepartureDate > Now(),我怀疑它会将结果过滤到尚未离开的那些。我想你想要< 而不是>

考虑使用INNER JOIN 而不是使用WHERE 子句来指定表中的行如何匹配。如果您可以从 Access 查询设计器的设计视图中构建此查询,那么设置连接将很容易。并且查询设计者在连接超过 2 个表时知道有关所需括号的规则......因此会生成让数据库引擎满意的 SQL。

【讨论】:

  • 好吧,我不能不使用设计视图中的查询。我只允许使用 SQL 模式并编写整个代码。也就是说,您在 SELECT 语句中添加(SUM)的代码以及 > 到
【解决方案2】:

正如engineersmnky 指出的那样,您的DATEDIFF 是错误的。应该是2个参数,出发后到达日期:

SELECT 
    ROOM.HotelNo, 
    DATEDIFF(RESERVATION.DepartureDate, RESERVATION.ArrivalDate) *  ROOM_TYPE.RoomRate AS TotalRevenue
FROM RESERVATION
JOIN ROOM ON 
    RESERVATION.RoomNo = ROOM.RoomNo
JOIN ROOM_TYPE ON
    ROOM.RoomType = ROOM_TYPE.RoomType
WHERE RESERVATION.DepartureDate > NOW()
GROUP BY ROOM.HotelNo;

我不知道你为什么在 DepartureDate 和 ArrivalDate 周围有括号,因为它们只是 RESERVATION 表上的列,对吗?

【讨论】:

  • 是的,它们是保留表中的列。我只是在网上查看了如何使用 DateDiff 函数,这就是我使用的原因。
  • 它看起来像MSSQL has a third parameter,所以这可能是你从哪里得到的,我上面的答案是针对 MySQL 的 - 你正在使用什么?
  • 不,我使用的是 MS Access
  • 哦。哈!对不起,这个问题被标记为 MySQL。恐怕我根本不知道 Access。
  • 我已经从这个问题中删除了 MySQL 标签并添加了一个 MS-Access 标签。祝你好运,但恐怕我无能为力了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多