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

时间:2019-08-14 17:14:40

标签: 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      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月的每日预订数量和每天的预订价值。第二部分是计算多少笔预订的Booking_date和Checking_date相同。

我对SQL非常陌生。我可以在纸上提出逻辑,但似乎无法弄清楚如何继续编写代码。

3 个答案:

答案 0 :(得分:1)

您可以在下面的代码中尝试此操作-

memcpy

答案 1 :(得分:1)

对于第一个问题,您可以尝试

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

答案 2 :(得分:1)

我建议以下查询:

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);

尤其要注意对日期的过滤。直接比较允许MySQL使用索引。

同一天的数字计算使用MySQL的一个不错的功能,其中布尔值在数字上下文中被视为数字。