【发布时间】:2022-01-11 00:25:51
【问题描述】:
如果有人在 2/3/22 入住并在 2/6/2022 退房,我正在尝试获得总房价。有些天属于不同的费率范围,您将在下面看到我能够获得每个范围内的天数,但我需要总价。任何帮助都会很棒。 所以例如 267+267+281 = 815
数据
| Unit | fromdate | todate | day |
|---|---|---|---|
| motel5 | 2022-01-10 | 2022-02-04 | 281 |
| motel5 | 2022-02-05 | 2022-03-04 | 267 |
查询
SELECT unit, fromdate, todate, day,
(DATEDIFF( IF (todate > '2022-02-06' , '2022-02-06', todate),
IF ( fromdate < '2022-02-02' , '2022-02-02' , fromdate )) )
AS days FROM rates_new WHERE fromdate <= '2022-02-06'
AND todate > '2022-02-02' AND Unit = 'motel5'
ORDER BY days ASC
结果
| Unit | fromdate | todate | day | days |
|---|---|---|---|---|
| motel5 | 2022-01-10 | 2022-02-04 | 281 | 2 |
| motel5 | 2022-02-05 | 2022-03-25 | 267 | 1 |
【问题讨论】:
-
您当前的查询将返回 281 = 2 天 .. 和 267 = 1 天。所以实际上是281+281+267=829
-
如果一个人在 2/3/22 入住并在 2/6/2022 退房包含的天数应该是 3、4、5,但根据您的结果,好像是4,5,6,你是指包含退房日期,但不包括入住日期,请问MySQL版本是多少。
-
@FanoFN 问题是我们如何获得代码来给我们 829?
-
@ProGu 我只是想弄清楚如何让这段代码给我总价
-
@LynnRoss ,根据您当前的数据样本和您的情况,正确的结果是什么?我在之前的评论中提到,您当前的查询返回的是
281+281+267=829,而不是您声称的267+267+281=815。所以,我的意思是你的查询是错误的,或者你的预期结果是错误的。请澄清,谢谢