您的位置:首页 > 数据库 > MySQL

查询一段时间内的具体时间

2016-12-21 09:27 148 查看

一、问题描述

一条订单的记录中有用车的起始时间,现在需要查询一段时间内,每天具体有几个订单。如:一个订单的用车时间为10月1号至10月5号,此时需查询出5条记录:


二、解决方案

[b]步骤[/b]

建表sql

drop table if exists charter_order_header;


create table charter_order_header

(

id                   int unsigned not null auto_increment comment 'ID',

unit_id              varchar(64) comment '单位ID',

unit_name            varchar(100) comment '单位名称',

department_id        varchar(64) comment '部门ID, 保留',

department           varchar(100) comment '部门名称',

order_number         char(11) comment '订单编号, 编号规则: yyMMdd + <5位流水号>, 5位流水号从 00001 始,至 99999 止, 编号全数字, 如 16102400002. 单位ID + 订单编号 构成唯一键',

business_type        int comment '业务类型, 1 = 包车,2 = 通勤',

customer_id          varchar(64) comment '客户ID',

customer_name        varchar(100) comment '客户名称',

customer_type        int comment '客户类型, 1 = 个人客户,2 = 单位客户',

customer_identifier  varchar(100) comment '客户证件号, 个人客户为身份证号,单位客户为统一社会信用代码',

customer_grade       int comment '(客户)会员级别, 1 = 普通会员,2 = 签约会员',

contact_id           varchar(64) comment '联系人ID',

contact_name         varchar(50) comment '联系人姓名',

phone_number         varchar(100) comment '客户/联系人电话',

charter_area_scope   int comment '包车(区域)类型, 1 = 县内包车,2 = 县际包车,3 = 省际包车',

charter_begin_time   datetime comment '用车时间起',

charter_end_time     datetime comment '用车时间止',

charter_begin_date   date comment '用车日期起, 同用车时间起的日期',

charter_end_date     date comment '用车日期止, 同用车时间止的日期',

duration             float comment '用车时长',

route_id             varchar(64) comment '线路ID',

route_name           varchar(100) comment '线路名称',

route_start_place    varchar(50) comment '线路起点',

start_area_code      varchar(10) comment '起点所属行政区划代码, 实际长度为6, 全数字, 对应码表类型 admin_area_code',

start_area_name      varchar(50) comment '起点所属行政区划名称',

route_end_place      varchar(50) comment '线路终点',

end_area_code        varchar(10) comment '终点所属行政区划代码',

end_area_name        varchar(50) comment '终点所属行政区划名称',

roads_passed         varchar(200) comment '途经路线',

big_sites_of_route   varchar(200) comment '主要停靠地',

route_kms_estimated  float comment '线路预估里程',

highway_kms_estimated float comment '高速里程, 线路预估里程中的高速里程数',

number_of_passengers int comment '乘车人数',

is_return_trip       bit comment '是否往返载客, true = 返程载客, false = 单程',

is_multiple_locations bit comment '是否多点接送客, true = 是, false = 否',

pickup_locations     varchar(200) comment '接客地点, 多个地点用逗号分隔',

destination          varchar(200) comment '送客目的地',

return_destinations  varchar(200) comment '送客返程目的地, 多个地点用逗号分隔',

is_salary_talked     bit comment '驾驶员协议趟次工资, true = 协议工资方式, false = 非协议工资方式',

bus_types            varchar(200) comment '车型列表, 逗号分隔的车型名称列表',

bus_count            int comment '车辆数',

is_driver_appointed  bit comment '是否指定驾驶员, true = 指定, false = 未指定',

price_type           int comment '价格类型, 1 = 全包,2 = 半包',

charge_type          int comment '计价方式, 若业务类型为包车, 取值: 1 = 总价,2 = 趟次价,3 = 日计价,4 = 人数计价; 若业务类型为通勤, 取值: 5 = 固定趟次价, 6 = 月总价分摊',

bus_unit_price       float comment '车辆单价',

is_contract_signed   bit comment '是否已签包车合同, true = 是, false = 否',

total_amount         float comment '(本次)包车总费用, 指订单价',

shuttle_quote_id     varchar(64) comment '关联通勤签约价ID, 关联包车签约价表ID, 通勤的月总价方式有效',

shuttle_month_price  float comment '(通勤)月总价, 通勤的月总价方式有效',

deposit_amount       float comment '订金额',

is_invoice_needed    bit comment '需开发票, true = 需要,false = 不需要',

invoice_info_id      varchar(64) comment '发票信息ID, 关联包车发票开票信息表ID, 可为空',

invoice_making_method int comment '开票方式, 1 = 单趟单开,2 = 统一开票. 需开发票为 true 时有效',

invoice_delivery_type int comment '发票交付方式, 1 = 随车交付,2 = 邮寄. 需开发票为 true 时有效',

invoice_buyer_name   varchar(100) comment '发票收票单位, 即发票抬头. 需开发票为 true 时有效',

mail_address         varchar(100) comment '邮寄地址. 需开发票为 true 时有效',

post_code            varchar(20) comment '邮编. 需开发票为 true 时有效',

recipient            varchar(50) comment '收件人. 需开发票为 true 时有效',

order_source         int comment '订单来源, 1 = 门店下单,2 = 电话下单,3 = QQ下单,4 = 其他来源',

order_accepter_id    varchar(64) comment '接单人ID',

order_accepter_name  varchar(50) comment '接单人姓名',

ordering_time        datetime comment '下单时间',

remarks              varchar(500) comment '其他备注',

order_status         int not null default 0 comment '订单状态, 0 = 编辑, 及其它',

cancel_reason        varchar(200) comment '订单取消原因, 订单状态为取消时有效',

cancel_notification  int default 0 comment '订单取消通知状态, 0 = 不通知, 1 = 待通知, 2 = 已通知',

plate_status         int comment '包车牌状态, 0 = 未办, 1 = 已办(该订单的全部车辆都办理包车牌后更新为已办)',

settlement_accounting_date date comment '结算记账日期, 指结算时记入订单账目的日期',

settlement_type      varchar(50) comment '结算类型',

settlement_days      float comment '结算天数',

settlement_number_of_passengers int comment '结算乘车人数',

settlement_order_amount float comment '结算价, 指订单的实际执行价',

settlement_amount_receivable float comment '订单应收',

settlement_remarks   varchar(500) comment '备注',

settlement_person_id varchar(64) comment '结算人ID',

settlement_person_name varchar(50) comment '结算人姓名',

settlement_time      datetime comment '结算时间, 即进行结算操作的时间',

invoice_made         int not null default 0 comment '开票状态, 0 = 未开票, 1 = 部分开票, 2 = (全部)已开票',

collection_status    int not null default 0 comment '收款状态, 0 = 未收, 1 = 未结清, 10 = 全款已收',

del_flag             char default '0' comment '注销标识, ''0'' = 正常, ''1'' = 删除',

create_id            varchar(64) comment '登记人ID',

create_by            varchar(30) comment '登记人姓名',

create_date          datetime comment '登记时间',

update_id            varchar(64) comment '最后修改人ID',

update_by            varchar(30) comment '最后修改人姓名',

update_date
4000
datetime comment '最后修改时间',

primary key (id),

unique key AK_UNIT_ORDER_NUMBER (unit_id, order_number),

key AK_CHARTER_OH_ORDER_STATUS (order_status)

);


alter table charter_order_header comment '包车订单头';


2. 查询10月1号至10月5号之间的具体日期
`drop procedure if exists select_dates;
create procedure select_dates( startTime date)
begin
drop table if exists tmp_daily_plan;
create TEMPORARY table tmp_daily_plan (plan_date date);
set @stop=date_add(startTime,INTERVAL 7 day);
while startTime <= @stop DO
insert into tmp_daily_plan values(startTime);
set startTime=date_add(startTime,interval 1 day);
end while;
end;`


3. 查询一段时间内每天的订单数

` drop procedure if exists select_transport_capacity;


` create procedure select_transport_capacity( planDateTo

date,planDateFrom date, planDateTo date, unitId varchar(100))

begin

drop table if exists tmp_daily_plan;

create TEMPORARY table tmp_daily_plan (plan_date date);

set @stop=date_add(planDateTo,INTERVAL 7 day);

while planDateTo <= @stop DO

insert into tmp_daily_plan values(planDateTo);

set planDateTo=date_add(planDateTo,interval 1 day);

END while;

select h.plan_date as planDate,IFNULL(h.orderCount,0) AS ```orderCount ,

IFNULL(h.busCount,0) AS busCount,IFNULL(k.idelCount,0) AS idelCount,

IFNULL(k.tripLineCount,0) AS tripLineCount ,

IFNULL(k.charterCount,0) AS charterCount,

IFNULL(k.maintenanceCount,0) AS maintenanceCount FROM

-- 查询当天包车订单数量、包车车辆需求数量

(SELECT COUNT(DISTINCT(id)) as orderCount,sum(bus_COUNT) as busCount,plan_date

FROM

-- 订单头连接日期表,查询出一段日期范围内的订单数据,同一订单有多天用车时间时会查询出用车时间日期内的多条订单记录

(SELECT * FROM (

SELECT o.id, `o.bus_COUNT,o.charter_begin_date,o.charter_end_date,o.unit_id,p.plan_date

FROM charter_order_header o ,tmp_daily_plan p WHERE  `o.charter_begin_date BETWEEN planDateFrom AND planDateTo
AND o.unit_id=unitId)s

WHERE s.plan_date BETWEEN s. charter_begin_date AND
s.charter_end_date)t
`

GROUP BY t.plan_date)h
left JOIN

-- 查询包车已调、班线已调车辆、维护车辆、已调车辆

(SELECT

COUNT(CASE is_idle WHEN 0 THEN null ELSE is_idle END) AS idelCount,

COUNT(CASE tripline_task_COUNT WHEN 0 THEN NULL ELSE tripline_task_COUNT END) AS tripLineCount,

COUNT(CASE charter_task_COUNT WHEN 0 THEN NULL ELSE charter_task_COUNT END) AS charterCount,

COUNT(CASE maintenance_task_COUNT WHEN 0 THEN NULL ELSE maintenance_task_COUNT END) AS maintenanceCount,

plan_date

FROM sched_bus_daily_plan

WHERE  plan_date >= planDateFrom  AND plan_date <= planDateTo

GROUP BY plan_date)k on k.plan_date = h.plan_date;

END;

call select_transport_capacity('2016-12-12','2016-12-12','2016-12-16','e398e88bbe314b1b9195a117a9585a1f')

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql-具体日期