一、问题描述

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

二、解决方案

步骤
  1. 建表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 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')

查询一段时间内的具体时间相关推荐

  1. java生成随机时间_Java生成某段时间内的随机时间

    上代码: import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 生成随机时间 ...

  2. es获取最大时间的记录_ES查询一段时间内某一循环时间段的数据

    业务需求:查询几个月类每天8点到10点的数据 最开始基于date类型,用painless脚本实现,用profile跟了下效率感觉不是很好,就冗余了个字段做range过滤,也一般,lucence了解的不 ...

  3. php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...

    数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...

  4. Linux 查询一段时间内的日志

    工作原理 一般情况下,日志的内容是按照时间顺序依次写入的.因此可以按照行号来定向查询. 注意 如果同一个文件内,是同一日期的日志,则只需要按照时间查询即可. 如果同一文件内有多个日期,则需要按照日期和 ...

  5. java中计算一段时间内白天的时间和夜晚的时间

    之前,采用拼接字符串的形式,不断地在Date类型和Long类型之间转换,实在是太过于麻烦,后来采取了这种思路:假设我们将22:00 ~ 10:00 视为夜间时间,则我们先计算出10:00 相对于当天的 ...

  6. java获取一段时间内的所有时间

    ArrayList<LocalDateTime> dateTimes = new ArrayList<>();for(int i = 0; i < 6; i++) {Lo ...

  7. Oracle查询一段时间内的数据

    本以为很简单的问题,今天做了一下还是感觉得多练习才可以各个数据库的写法可能不同 Oracle 方法如下: 1.select xmdadocdt from dsdata.xmda_t where xmd ...

  8. Oracle查询一段时间内的每一天

    select to_date('2018-09-01', 'yyyy-MM-dd') + rownum - 1 as datedayfrom dual connect by rownum <= ...

  9. mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例

    本文实例讲述了PHP+MySQL实现对一段时间内每天数据统计优化操作.分享给大家供大家参考,具体如下: 在互联网项目中,对项目的数据分析必不可少.通常会统计某一段时间内每天数据总计变化趋势调整营销策略 ...

最新文章

  1. 解决 Windows instance 时间不同步问题 - 每天5分钟玩转 OpenStack(153)
  2. MyISAM InnoDB 区别
  3. 实验技术杂志文献20180126
  4. 全国计算机等级考试题库二级C操作题100套(第61套)
  5. android 蓝牙各种UUID (转)
  6. python建立py文件夹过程_Pycharm创建python文件自动添加日期作者等信息(步骤详解)...
  7. mysql 分类汇总_sql多级分类汇总实现介绍
  8. 只看影子就能还原视频,MIT新算法让摄像头无死角
  9. 比赛结果展示时,某些文字过长,如何使其换行又不影响美观?
  10. 最小二乘法曲线拟合(c++实现)
  11. 查询论文SCI/EI检索及引用报告
  12. 云计算的发展趋势(一)云计算相关领域介绍
  13. IM的扫码登录功能如何实现?
  14. crx什么意思_CRX文件怎么打开-CRX是什么格式-CRX文件是什么意思-腾牛网
  15. c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...
  16. JAVA入门第二季 第一章 类和对象
  17. 鸿蒙系统一直重启怎么办,我的电脑能开机随后就是进不了系统一直黑在那边,时间长了就自动重启...
  18. 关于NS-2仿真中移动节点的设置
  19. Monkey King - 左偏树
  20. 微信小程序直传腾讯云COS并对图片持久化文字水印案例

热门文章

  1. 常用集合转JSON字符串公共类
  2. 从零搭建若依环境(非分离版)
  3. Socket实战——Teardrop代码编程
  4. xposed检测方法
  5. 忘记teamviewer密码怎么办?
  6. 地塞米松/多柔比星/胡桃醌/丹皮酚-PLGA聚乳酸-羟基乙酸纳米粒
  7. 删除Karabiner-Elements 和 Karabiner-EventViewer提示项目被锁定
  8. linux串口操作及设置
  9. 计算机房常配用的,计算机房常配用的是( )灭火器。
  10. 【故障诊断】基于 KPCA 进行降维、故障检测和故障诊断研究(Matlab代码实现)