如果有人在 2/3/22 入住并在 2/6/2022 退房,我正在嘗試獲得總房價。有些天屬于不同??的費率范圍,您將在下面看到我能夠獲得每個范圍內的天數,但我需要總價。任何幫助都會很棒。例如 267 267 281 = 815
資料
| 單元 | 從日期 | 迄今為止 | 日 |
|---|---|---|---|
| 汽車旅館5 | 2022-01-10 | 2022-02-04 | 281 |
| 汽車旅館5 | 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
結果
| 單元 | 從日期 | 迄今為止 | 日 | 天 |
|---|---|---|---|---|
| 汽車旅館5 | 2022-01-10 | 2022-02-04 | 281 | 2 |
| 汽車旅館5 | 2022-02-05 | 2022-03-25 | 267 | 1 |
uj5u.com熱心網友回復:
我認為您可以將查詢修改為以下內容:
SET @mindt := '2022-02-02';
SET @maxdt := '2022-02-06';
SELECT unit,
SUM(days*day)
FROM
(SELECT unit, fromdate, todate, day,
DATEDIFF(IF(todate > @maxdt, @maxdt, todate),
IF(fromdate < @mindt, @mindt, fromdate)) AS days
FROM rates_new
WHERE fromdate <= '2022-02-06'
AND todate > '2022-02-02') V
GROUP BY unit;
不要在查詢中定義日期,而是嘗試使用變數,這樣您只需要更改變數中的日期值并將變數相應地放置在查詢中。然后洗掉此條件:
AND Unit = 'motel5'
并將查詢轉換為子查詢。從那里您可以進行SUM(days*day)然后 group by的計算unit。
更新的小提琴
uj5u.com熱心網友回復:
您可以使用least()和greatest()獲取范圍或訪問的結束日期之間的范圍內的有效邊界。使用datediff()與價格得到一天的差別,乘法和使用聚合sum()得到的總價格為這次訪問。
SELECT sum(datediff(least(adddate('2022-02-06',
INTERVAL 1 DAY),
todate),
greatest('2022-02-03',
fromdate))
* day)
FROM rates_new
WHERE unit = 'motel5'
AND fromdate <= '2022-02-06'
AND todate >= '2022-02-03';
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408771.html
標籤:
