Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 SQL:特定日期范围内的计数/求和列_Mysql_Sql_Constraints_Date Range - Fatal编程技术网

Mysql SQL:特定日期范围内的计数/求和列

Mysql SQL:特定日期范围内的计数/求和列,mysql,sql,constraints,date-range,Mysql,Sql,Constraints,Date Range,我有一张大致像这样的桌子。有数千行 booking_date checkin_date ...some other columns .... booking_value 22-mar-2016 29-mar-2016 ........................... $150 01-apr-2016 17-may-2016 ........................... $500 09-apr-2016

我有一张大致像这样的桌子。有数千行

booking_date   checkin_date    ...some other columns  ....    booking_value
22-mar-2016      29-mar-2016   ...........................         $150
01-apr-2016      17-may-2016   ...........................         $500
09-apr-2016      09-apr-2016   ...........................         $222
17-apr-2016      23-apr-2016  ...........................          $75
19-apr-2016      31-july-2016 ...........................          $690
03-May-2016      07-May-2016  .............................        $301
.
.
.
.
我试图计算2016年4月每天的预订数量和预订价值。第二部分是计算预订日期和检查日期相同的预订数量


我对SQL非常陌生。我可以在论文中阐述逻辑,但似乎不知道如何继续编写代码

您可以尝试下面的代码-

SELECT CAST(booking_date AS DATE), 
COUNT(*) Number_of_Booking,
COUNT(
    CASE 
        WHEN CAST(booking_date AS DATE)  
            = CAST(checkin_date AS DATE) THEN 1
        ELSE NULL
    END
) count_with_same_date,
SUM(booking_value) booking_value -- Booking value has to be Number field
FROM your_table
WHERE YEAR(booking_date ) = 2016
AND MONTH(booking_date ) = 4
GROUP BY CAST(booking_date AS DATE)

您可以尝试下面的代码-

SELECT CAST(booking_date AS DATE), 
COUNT(*) Number_of_Booking,
COUNT(
    CASE 
        WHEN CAST(booking_date AS DATE)  
            = CAST(checkin_date AS DATE) THEN 1
        ELSE NULL
    END
) count_with_same_date,
SUM(booking_value) booking_value -- Booking value has to be Number field
FROM your_table
WHERE YEAR(booking_date ) = 2016
AND MONTH(booking_date ) = 4
GROUP BY CAST(booking_date AS DATE)

第一个问题你可以试试

Select booking_date
       ,count(*) as Number_of_bookings
       ,Sum(booking_value) as value
From table_name
Where booking_date between '01-apr-2016' and '30-apr-2016'
group by booking_date:
也可以在过滤器中使用month()和year()函数

对于第二个问题,请尝试

Select booking_date
       ,checkin_date
       ,count(*)
from table_name
where booking_date=checkin_date
group by booking_date, checkin_date

第一个问题你可以试试

Select booking_date
       ,count(*) as Number_of_bookings
       ,Sum(booking_value) as value
From table_name
Where booking_date between '01-apr-2016' and '30-apr-2016'
group by booking_date:
也可以在过滤器中使用month()和year()函数

对于第二个问题,请尝试

Select booking_date
       ,checkin_date
       ,count(*)
from table_name
where booking_date=checkin_date
group by booking_date, checkin_date

我建议提出以下问题:

SELECT CAST(booking_date AS DATE), COUNT(*) as Number_of_Booking,
       SUM(CAST(booking_date AS DATE) = CAST(checkin_date AS DATE)) as count_with_same_date,
       SUM(booking_value) as booking_value
FROM t
WHERE booking_date >= '2016-04-01' AND
      booking_date < '2016-05-01'
GROUP BY CAST(booking_date AS DATE);
选择演员阵容(预订日期为日期),将(*)计算为预订数量,
总和(CAST(预订日期为日期)=CAST(签入日期为日期))作为计数,日期相同,
总额(记账金额)作为记账金额
从t
其中预订日期>='2016-04-01'和
预订日期<'2016-05-01'
按演员分组(预订日期为日期);
特别要注意日期的过滤。直接比较允许MySQL使用索引


同一日期的数字计算使用MySQL的一个很好的功能,其中布尔值在数字上下文中被视为数字。

我建议使用以下查询:

SELECT CAST(booking_date AS DATE), COUNT(*) as Number_of_Booking,
       SUM(CAST(booking_date AS DATE) = CAST(checkin_date AS DATE)) as count_with_same_date,
       SUM(booking_value) as booking_value
FROM t
WHERE booking_date >= '2016-04-01' AND
      booking_date < '2016-05-01'
GROUP BY CAST(booking_date AS DATE);
选择演员阵容(预订日期为日期),将(*)计算为预订数量,
总和(CAST(预订日期为日期)=CAST(签入日期为日期))作为计数,日期相同,
总额(记账金额)作为记账金额
从t
其中预订日期>='2016-04-01'和
预订日期<'2016-05-01'
按演员分组(预订日期为日期);
特别要注意日期的过滤。直接比较允许MySQL使用索引



同一日期的数字计算使用MySQL的一个很好的功能,其中布尔值在数字上下文中被视为数字。

请标记相应的数据库名称。同时添加您正在尝试使用的脚本和预期数据。预期结果将非常有用。请标记相应的数据库名称。还要添加您正在尝试使用的脚本和预期的数据。预期的结果会很有帮助。谢谢,这非常有效。我可以问一下,如果预订日期和检查日期在同一日期范围内相同,我应该包括什么来查找预订数量?@rahul请检查脚本中添加的新计数计算。非常感谢您的帮助。哦。。。混乱。新的计算也将每天检查。例如,如果2016年4月1日有5次预订,则会计算其中有多少人具有相同的预订和入住日期。可能是五分之二。希望这对你没问题。是的,我没问题,谢谢你的时间。谢谢,这很好用。我可以问一下,如果预订日期和检查日期在同一日期范围内相同,我应该包括什么来查找预订数量?@rahul请检查脚本中添加的新计数计算。非常感谢您的帮助。哦。。。混乱。新的计算也将每天检查。例如,如果2016年4月1日有5次预订,则会计算其中有多少人具有相同的预订和入住日期。可能是五分之二。希望你没问题。是的,我没问题,谢谢你的时间。@rahul。它不仅仅是干净的代码。这是编写查询的最佳方式。能够使用索引(和分区)进行过滤非常重要。我同意,很高兴学到了一些东西。这对我来说也很容易理解。@rahul。它不仅仅是干净的代码。这是编写查询的最佳方式。能够使用索引(和分区)进行过滤非常重要。我同意,很高兴学到了一些东西。这对我来说也很容易理解。