我有两张桌子,
1. items
2. festival_rents
样本记录:
items
id | name | rent
------------------------
1 | Car | 100
2 | Truck | 150
3 | Van | 200
样本记录:
festival_rents
id | items_id | start_date | end_date | rent
------------------------------------------------
1 | 1 | 2018-07-01 | 2018-07-02 | 200
2 | 1 | 2018-07-04 | 2018-07-06 | 300
3 | 3 | 2018-07-06 | 2018-07-07 | 400
表items
包含name
和rent
的项目列表。 items
表格中的每个项目都可能包含festival_rents
,也可能没有festival_rents
。对于start_date
和end_date
的日期范围,表格festival_rents
的每个项目的租金都较高。项目可能有多个festival_rents
具有不同的日期范围。但可以肯定的是,属于同一item
的多个start_date
的日期范围不会发生冲突,所有日期范围都会被隔离。
对于给定的end_date
和items
范围,我正在寻找的查询对于festival_rents
表中的每个项目,计算总租金并显示每个项目它计算了总租金。如果items
festival_rents
中的任何start_date
属于给定的end_date
和start_date=2018-07-01
,则每个项目的租金计算也应包括end_date=2018-07-06
。
预期结果:
输入:id | name | total_price
------------------------
1 | Car | 1100 // 1st 2 days festival rent + 1 day normal rent + last 3 days festival rent (2 * 200) + (1 * 100) + (3 * 200)
2 | Truck | 900 // 6 days normal rent (6 * 150)
3 | Van | 1400 // 5 days normal rent + 1 day festival rent (200 * 5) + (400 * 1)
和document.cookie = name + "=; path=/; domain=.MYDOMAIN"; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
输出:
$poets['keyboard']
答案 0 :(得分:0)
您需要在桌面上列出日期或动态创建:
How to get list of dates between two dates in mysql select query
Generating time series between two dates in PostgreSQL
function coursesToFind {
local courseToSearch=$1
grep $1 courses.list > tmp
local linesNumber=$(wc -l tmp | cut -f1)
for((i = 0; i<$linesNumber; i++)); do
local arrToSearchIn=$(grep $courseToSearch courses.list | head -n+1 | tail -1)
if (($arrToSearchIn==$courseToSearch)) ; then
break
fi
done
for((i=$linesNumber; i>2 ;i--)); do
if (($arrToSearchIn[i]==*[0-9]*[0-9]*[0-9]*[0-9]*[0-9]*[0-9])) ; then
coursesArray[n]=$(arr[i])
n++
coursesToFind $(arr[i])
fi
done
}
我假设end_date是开放范围。因此,如果您有范围SELECT i.name, SUM (f.rent)
FROM allDays a
JOIN festival_rents f
ON a.day >= f.start_date
AND a.day < f.end_date
JOIN items i
ON f.item_id = i.item_id
WHERE a.day BETWEEN @start_date
AND @end_date
GROUP BY i.name
和[A,B)
,则日期B将从[B,C)
获得租金