Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为不同的日期间隔创建mysql查询_Mysql_Sql - Fatal编程技术网

为不同的日期间隔创建mysql查询

为不同的日期间隔创建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天到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 
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需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按预订日期分组。是否可能?谢谢回复。我也需要按月计数。按书籍分组有可能吗?