使用SQL表达式计算公寓的完整性

时间:2015-10-17 09:59:39

标签: mysql sql

我有一个如下所示的数据库:

预订表:

-------------------------------------------------
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的)。

2 个答案:

答案 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())函数来获取月中的最后一天。然后使用你的逻辑计算。