我有一个如下所示的数据库:
预订表:
-------------------------------------------------
id | room_id | start | end |
1 | 1 | 2015-05-13 | 2015-05-16 |
2 | 1 | 2015-05-18 | 2015-05-20 |
3 | 1 | 2015-05-21 | 2015-05-24 |
-------------------------------------------------
公寓表:
---------------------------------------
id | room_id | name |
1 | 1 | test apartment |
---------------------------------------
意思是在05(5月)的月份,数据库中有31天我们有3个事件给我们8天的使用31 - 8 = 23/31 = 0.741 * 100 =%74.1是空虚的百分比%25.9是使用百分比。我怎么能在SQL中完成所有这些? (MySQL的)。
答案 0 :(得分:0)
这是我的建议:
SELECT SUM(DAY(`end`)-DAY(`start`))/EXTRACT(DAY FROM LAST_DAY(`start`)) FROM `apt`;
LAST_DAY
函数将输出日期的最后一天作为输出。
答案 1 :(得分:0)
检查
http://sqlfiddle.com/#!9/7c53b/2/0
不是最有效的查询,但会完成工作。
select
sum(a.days)*100/(SELECT DAY(LAST_DAY(min(start))) from test1)
as usePercent,
100-(sum(a.days)*100/(SELECT DAY(LAST_DAY(min(start))) from test1))
as emptyPercent
FROM
(select DATEDIFF(end,start) as days from test1) a
我所做的是先获取日期差异并计算它们。然后在嵌套查询中使用day(last_day())函数来获取月中的最后一天。然后使用你的逻辑计算。