下表包含客户预订。客户来到此表中创建一条记录,并且该表的最后一天将通过放置当前时间来更新其checkout_date
字段。
表格
现在我需要提取所有消费夜晚的客户。
查询
SELECT reservations.customerid, reservations.roomno, rooms.rate,
reservations.checkin_date, reservations.billed_nights, reservations.status,
DateDiff("d",reservations.checkin_date,Date())+Abs(DateDiff("s",#12/30/1899
14:30:0#,Time())>0) AS Due_nights FROM reservations, rooms WHERE
reservations.roomno=rooms.roomno;
我需要的是,如果客户有结账状态,将按照结账日期而不是当前日期计算到期夜晚checkin_date
,如果客户有结帐日期,则无需从{{1}添加额外的绝对值}。
我当前的查询视图如下,同时我的计算机时间为14:30
,因此它会为每个查询添加14:39
。
答案 0 :(得分:1)
由于您要计算截止日期之前的截止日期,以及是否仍在使用当前日期进行检查。我建议你使用立即If。
要检查的条件是房间的status
。如果是checkout
,则使用checkout_date
,否则请使用Now()
,例如。
SELECT
reservations.customerid,
reservations.roomno,
rooms.rate,
reservations.checkin_date,
reservations.billed_nights,
reservations.status,
DateDiff("d", checkin_date, IIF(status = 'checkout', checkout_date, Now())) As DueNights
FROM
reservations
INNER JOIN
rooms
ON reservations.roomno = rooms.roomno;
您可能已经注意到,我使用了JOIN
。这比使用公共标识符合并两个表更有效。希望这有帮助!