为不同的日期间隔创建mysql查询
我有一个包含这些字段的表。 预订日期,离开日期 客户可以预订一家酒店,租期从1天到1年不等。 我需要计算有多少人在不同的时间间隔预订了酒店。 天数间隔可以如下所示:为不同的日期间隔创建mysql查询,mysql,sql,Mysql,Sql,我有一个包含这些字段的表。 预订日期,离开日期 客户可以预订一家酒店,租期从1天到1年不等。 我需要计算有多少人在不同的时间间隔预订了酒店。 天数间隔可以如下所示: 1-7 days 7-14 days 15-30 days 31-45 days 46-60 days 61-90 days 91-120 days 121-180 days 通过此查询,我可以获得任何一天的预订数量 select DATEDIFF( booking_date,leaving_date) as day_diff
1-7 days
7-14 days
15-30 days
31-45 days
46-60 days
61-90 days
91-120 days
121-180 days
通过此查询,我可以获得任何一天的预订数量
select DATEDIFF( booking_date,leaving_date) as day_diff
from hotel_booking
group by day_diff;
但不能像上面提到的那样为不同的天数间隔创建查询。我还需要每月一次的计数组。您可以使用条件聚合将现有查询包装到另一个查询中,以获得每个期间长度的计数:
SELECT SUM(day_diff BETWEEN 1 AND 7) AS `1 to 7 days`,
SUM(day_diff BETWEEN 8 AND 14) AS `8 to 14 days`,
SUM(day_diff BETWEEN 15 AND 30) AS `15 to 30 days`,
SUM(day_diff BETWEEN 31 AND 45) AS `31 to 45 days`,
SUM(day_diff BETWEEN 46 AND 60) AS `46 to 60 days`,
SUM(day_diff BETWEEN 61 AND 90) AS `61 to 90 days`,
SUM(day_diff BETWEEN 91 AND 120) AS `91 to 120 days`,
SUM(day_diff BETWEEN 121 AND 180) AS `121 to 180 days`
FROM (SELECT DATEDIFF(booking_date, leaving_date) AS day_diff
FROM hotel_booking) dd
要按预订月份对值进行分组,请将查询更改为
SELECT MONTH(booking_date) AS booking_month,
SUM(day_diff BETWEEN 1 AND 7) AS `1 to 7 days`,
SUM(day_diff BETWEEN 8 AND 14) AS `8 to 14 days`,
SUM(day_diff BETWEEN 15 AND 30) AS `15 to 30 days`,
SUM(day_diff BETWEEN 31 AND 45) AS `31 to 45 days`,
SUM(day_diff BETWEEN 46 AND 60) AS `46 to 60 days`,
SUM(day_diff BETWEEN 61 AND 90) AS `61 to 90 days`,
SUM(day_diff BETWEEN 91 AND 120) AS `91 to 120 days`,
SUM(day_diff BETWEEN 121 AND 180) AS `121 to 180 days`
FROM (SELECT DATEDIFF(booking_date, leaving_date) AS day_diff
FROM hotel_booking) dd
GROUP BY booking_month
ORDER BY booking_month
您可以使用条件聚合将现有查询包装到另一个查询中,以提供每个时段长度的计数:
SELECT SUM(day_diff BETWEEN 1 AND 7) AS `1 to 7 days`,
SUM(day_diff BETWEEN 8 AND 14) AS `8 to 14 days`,
SUM(day_diff BETWEEN 15 AND 30) AS `15 to 30 days`,
SUM(day_diff BETWEEN 31 AND 45) AS `31 to 45 days`,
SUM(day_diff BETWEEN 46 AND 60) AS `46 to 60 days`,
SUM(day_diff BETWEEN 61 AND 90) AS `61 to 90 days`,
SUM(day_diff BETWEEN 91 AND 120) AS `91 to 120 days`,
SUM(day_diff BETWEEN 121 AND 180) AS `121 to 180 days`
FROM (SELECT DATEDIFF(booking_date, leaving_date) AS day_diff
FROM hotel_booking) dd
要按预订月份对值进行分组,请将查询更改为
SELECT MONTH(booking_date) AS booking_month,
SUM(day_diff BETWEEN 1 AND 7) AS `1 to 7 days`,
SUM(day_diff BETWEEN 8 AND 14) AS `8 to 14 days`,
SUM(day_diff BETWEEN 15 AND 30) AS `15 to 30 days`,
SUM(day_diff BETWEEN 31 AND 45) AS `31 to 45 days`,
SUM(day_diff BETWEEN 46 AND 60) AS `46 to 60 days`,
SUM(day_diff BETWEEN 61 AND 90) AS `61 to 90 days`,
SUM(day_diff BETWEEN 91 AND 120) AS `91 to 120 days`,
SUM(day_diff BETWEEN 121 AND 180) AS `121 to 180 days`
FROM (SELECT DATEDIFF(booking_date, leaving_date) AS day_diff
FROM hotel_booking) dd
GROUP BY booking_month
ORDER BY booking_month
您可以使用条件聚合:
SELECT
SUM(day_diff >= 1 AND day_diff <= 7) `1-7 days`,
SUM(day_diff >= 8 AND day_diff <= 14) `8-14 days`,
SUM(day_diff >= 15 AND day_diff <= 30) `15-30 days`,
SUM(day_diff >= 31 AND day_diff <= 45) `31-45 days`,
SUM(day_diff >= 46 AND day_diff <= 60) `46-60 days`,
SUM(day_diff >= 61 AND day_diff <= 90) `61-90 days`,
SUM(day_diff >= 91 AND day_diff <= 120) `91-120 days`,
SUM(day_diff >= 121 AND day_diff <= 180) `121-180 days`
FROM (
SELECT DATEDIFF( booking_date,leaving_date) day_diff FROM hotel_booking
) x
选择
求和(day_diff>=1,day_diff=8,day_diff=15,day_diff=31,day_diff=46,day_diff=61,day_diff=91,day_diff=121,day_diff您可以使用条件聚合:
SELECT
SUM(day_diff >= 1 AND day_diff <= 7) `1-7 days`,
SUM(day_diff >= 8 AND day_diff <= 14) `8-14 days`,
SUM(day_diff >= 15 AND day_diff <= 30) `15-30 days`,
SUM(day_diff >= 31 AND day_diff <= 45) `31-45 days`,
SUM(day_diff >= 46 AND day_diff <= 60) `46-60 days`,
SUM(day_diff >= 61 AND day_diff <= 90) `61-90 days`,
SUM(day_diff >= 91 AND day_diff <= 120) `91-120 days`,
SUM(day_diff >= 121 AND day_diff <= 180) `121-180 days`
FROM (
SELECT DATEDIFF( booking_date,leaving_date) day_diff FROM hotel_booking
) x
选择
求和(day_diff>=1和day_diff=8和day_diff=15和day_diff=31和day_diff=46和day_diff=61和day_diff=91和day_diff=121和day_diff您可以通过以下操作将这些值放在单独的行中:
select (case when booking_date < leaving_date + interval
7 day then '1-7 day'
when booking_date < leaving_date + interval
14 day then '7-14 day'
. . .
end) as diff,
count(*)
from hotel_booking
group by diff;
选择(预订日期<离开日期+间隔时的情况)
7天,然后是“1-7天”
预订日期<离开日期+时间间隔时
14天,然后是“7-14天”
. . .
结束)作为差异,
计数(*)
从酒店预订
按差异分组;
您可以通过执行以下操作将这些值放在单独的行中:
select (case when booking_date < leaving_date + interval
7 day then '1-7 day'
when booking_date < leaving_date + interval
14 day then '7-14 day'
. . .
end) as diff,
count(*)
from hotel_booking
group by diff;
选择(预订日期<离开日期+间隔时的情况)
7天,然后是“1-7天”
预订日期<离开日期+时间间隔时
14天,然后是“7-14天”
. . .
结束)作为差异,
计数(*)
从酒店预订
按差异分组;
谢谢回复。我还需要按月统计。按预订日期分组。可能吗?@user1791574查看我的编辑。我想这会满足您的需要。谢谢回复。我还需要按月统计。按预订日期分组。可能吗?@user1791574查看我的编辑。我想这会满足您的需要。谢谢回复。我可以o需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按书籍分组有可能吗?