首页 > 解决方案 > 基于工作日的两天之间的费率

问题描述

CREATE TABLE `hotelrates` (
  `hotel_id` int(11) NOT NULL,
  `date_from` date DEFAULT NULL,
  `date_to` date DEFAULT NULL,
  `sunday_rate` float DEFAULT NULL,
  `monday_rate` float DEFAULT NULL,
  `tuesday_rate` float DEFAULT NULL,
  `wednesday_rate` float DEFAULT NULL,
  `thuesday_rate` float DEFAULT NULL,
  `friday_rate` float DEFAULT NULL,
  `saturday_rate` float DEFAULT NULL,
  PRIMARY KEY (`hotel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

insert into hotelrates
set hotel_id = '100',
date_from  = '2021-01-01',
date_from  = '2021-12-31',
sunday_rate = '75',
monday_rate = '75',
tuesday_rate = '75',
wednesday_rate = '75',
thuesday_rate = '100',
friday_rate = '100',
saturday_rate = '100';

我需要一个 SQL 查询来获取基于工作日的两天之间的费率,

例如 2021-06-15 到 2021-06-19,总费率为 350(350 = tuesday_rate + wednesday_rate + thuesday_rate + friday_rate)

标签: mysql

解决方案


试试下面的解决方案。使用此解决方案,您必须知道 BETWEEN 运算符是包容性的。这意味着包括开始值和结束值。

CREATE TABLE `hotelrates` (
    `hotel_id` INT(11) NOT NULL,
    `date_from` DATE DEFAULT NULL,
    `date_to` DATE DEFAULT NULL,
    `weekday` INT DEFAULT NULL,
    `rate` FLOAT DEFAULT NULL
);

INSERT INTO hotelrates
  ( hotel_id, date_from, date_to, weekday, rate)
VALUES
  ('100', '2021-01-01', '2021-12-31', '6', '75'), -- Sunday
  ('100', '2021-01-01', '2021-12-31', '0', '75'), -- Monday
  ('100', '2021-01-01', '2021-12-31', '1', '75'), -- Tuesday
  ('100', '2021-01-01', '2021-12-31', '2', '75'), -- Wednesday
  ('100', '2021-01-01', '2021-12-31', '3', '100'), -- Thursday
  ('100', '2021-01-01', '2021-12-31', '4', '100'), -- Friday
  ('100', '2021-01-01', '2021-12-31', '5', '100'); -- Saturday


SELECT 
    SUM(rate) AS total_rate
FROM
    hotelrates
WHERE
    weekday BETWEEN WEEKDAY('2021-06-15') AND WEEKDAY('2021-06-19');

推荐阅读