查询每人每天的数据

首先先建表

CREATE TABLE `user` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `repair` (
`name` varchar(255) DEFAULT NULL,
`repair_num` varchar(255) DEFAULT NULL,
`repair_second` varchar(255) DEFAULT NULL,
`date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `talair` (
`name` varchar(255) DEFAULT NULL,
`talair_num` varchar(255) DEFAULT NULL,
`talair_second` varchar(255) DEFAULT NULL,
`date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `user` (
`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入测试数据:

这个时间表也可以使用存储过程进行生成,有需要的请参考上一篇博客

表数据建立好了,那么怎么使用mysql实现需求呢?

先使用传统的inner join 与left join 试试

inner join 的效果,显然这是将两张表数据相同数据进行连接,数据不准确,且没有按照时间去进行分组,时间统计不准确

需要的效果是

这样,但是需要去除笛卡尔积,按照人与时间进行分类

由于第一张表有的数据,第二张表没有,且时间不同,那么现在就需要借助创建的user表与date表

可以这样写:

select * from user join date
left join repair on repair.name = user.name and date.date = repair.date
left join talair on talair.name = user.name and date.date = talair.date;

效果是:

这样就查询出了张三这个人在9-17这天,进行了1次拖车1与4次小修,达到了按时间去分组查询每人每天数据的目的,且不会因为数据表不完全而导致数据丢失

接下来就是去除产生的笛卡尔积,可以直接将为null的值排除

SELECT
* FROM
USER JOIN date
LEFT JOIN REPAIR ON REPAIR.NAME = USER.NAME
AND date.date = REPAIR.date
LEFT JOIN talair ON talair.NAME = USER.NAME
AND date.date = talair.date
WHERE
talair.talair_num IS NOT NULL
OR talair.talair_second IS NOT NULL
OR REPAIR.repair_num IS NOT NULL or REPAIR.repair_second is not null ;

这其中有一点是非常重要的,就是user表与date表两个表完全不相关,是通过拖车与小修两张表进行的关联

在写报表的过程中,通常是写周月日的统计,那么会先建立一张日维表或者月维表,但是却与主表不关联,只是作为一个时间字段展示,那么这种连接方式就

显得尤为重要

分享一个工作中遇得到的sql(按每天每人统计拖车次数与小修次数)的更多相关文章

  1. 收集一些工作中常用的经典SQL语句

    作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...

  2. 【开源】【前后端分离】【优雅编码】分享我工作中的一款MVC+EF+IoC+Layui前后端分离的框架——【NO.1】框架概述

    写博客之前总想说点什么,但写的时候又忘了想说点什么,算了,不说了,还是来送福利吧. 今天是来分享我在平时工作中搭建的一套前后端分离的框架. 平时工作大多时候都是在做管理类型的软件开发,无非就是增.删. ...

  3. 工作中遇到的99%SQL优化,这里都能给你解决方案

    前几篇文章介绍了mysql的底层数据结构和mysql优化的神器explain.后台有些朋友说小强只介绍概念,平时使用还是一脸懵,强烈要求小强来一篇实战sql优化,经过周末两天的整理和总结,sql优化实 ...

  4. 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)

    安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...

  5. 在工作中常用到的SQL

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在公司做了几张报表,还记得刚开始要做报表的时候都 ...

  6. 分享php工作中遇到的一些探究和技巧【2】

    1 如何定义linux和window通用的文件分隔符号 DIRECTORY_SEPARATOR :  目录分隔符,是定义php的内置常量.在调试机器上,在windows我们习惯性的使用"\& ...

  7. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  8. 工作中常用到的sql命令!!!

    一.mysql数据库日常操作.     1.启动mysql:/etc/init.d/mysql start (前面为mysql的安装路径)     2.重启mysql:  /etc/init.d/my ...

  9. 工作中遇到的99%SQL优化,这里都能给你解决方案(二)

    -- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL ...

随机推荐

  1. Servlet 2.5为cookie配置HTTPOnly属性

    cookie的HTTPOnly属性,主要是用来防止JavaScript来读取cookie,默认情况下,JavaScript可以通过document.cookie来读取cookie,这样是很不安全的.通 ...

  2. input type=number去掉上下箭头

    <input type="number" ...> <style> input::-webkit-outer-spin-button, input::-we ...

  3. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  4. 让免费版MarkdownPad2使用Pro版本的功能

    让免费版MarkdownPad2使用Pro版本的功能 找到配置文件 启用Markdown扩展模式 Markdown处理器:Github风格 语法检查设置 自动保存设置 找到配置文件 一般在用户的数据目 ...

  5. nutz 结合QueryResult,Record 自定义分页查询,不构建pojo 整合

    public QueryResult getHistoryIncome(int d, int curPage) throws Exception { /**sql**/ Sql sql = Sqls. ...

  6. SQLServer用存储过程实现插入更新数据

    实现 1)有同样的数据,直接返回(返回值:0): 2)有主键同样,可是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create pr ...

  7. BZOJ1820:[JSOI2010]Express Service 快递服务(DP)

    Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...

  8. TSP 模拟退火

    TSP——模拟退火解法 都知道TSP是经典的NP问题,从一个点开始遍历所有点,不重复,求最短路径. 可以用枚举终点,跑流量为2的最小费用,图论来做,时间复杂度为 ​ 费用流已经用到堆优化了.显然点,边 ...

  9. 【转】eclipse 错误信息 "File Search" has encounter a problem 解决

    在eclipse中使用搜索功能,发生错误: "File Search" has encounter a problem 仔细看了一下自动跳出的错误日志(Error Log),发现: ...

  10. POJ 1330 Nearest Common Ancestors 【LCA模板题】

    任意门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000 ...