背景:
一张表 有 name , crt_time , work_sts 三个字段

这张表里存在这样的数据

'a', '2018-12-18 21:37:24', '未'
'a', '2018-12-19 09:37:24', '完'
'a', '2018-12-19 21:37:24', '未'
'b', '2018-11-18 21:37:24', '完'
'b', '2018-11-19 20:37:24', '完'
'b', '2018-11-20 09:37:24', '完'
'c', '2018-11-18 21:47:24', '完'
'c', '2018-11-19 20:57:24', '完'
'c', '2018-11-20 09:33:24', '未'
'd', '2018-12-18 21:17:24', '未'
'd', '2018-12-19 09:17:24', '完'
'd', '2018-12-19 21:17:24', '完'

现在需要根据 name 去重 要求如下:
1. 同一个name下 work_sts没有 未 的时候 取 完 数据里 crt_time 最大的那条数据
2. 同一个name下 work_sts有一个 未 取 未 这条数据
3. 同一个name下 work_sts有多个 未 取 未 数据里 crt_time 最大的那条数据

答案:

SELECT a.*
FROM t_test a
JOIN(
SELECT col1,MAX(col2) col2
FROM t_test
WHERE col3='未'
GROUP BY col1
HAVING SUM(IF(col3='未',1,0)) > 0
)b
WHERE a.col1 = b.col1 AND a.col2 = b.col2
UNION
SELECT a.*
FROM t_test a
JOIN (
SELECT col1,MAX(col2) col2
FROM t_test
GROUP BY col1
HAVING SUM(IF(col3='未',1,0)) = 0
)c
WHERE a.col1 = c.col1 AND a.col2 = c.col2
ORDER BY col1
CREATE TABLE `t_test` (
`col1` varchar(32) DEFAULT NULL COMMENT 'col1',
`col2` varchar(128) DEFAULT NULL COMMENT 'col2',
`col3` varchar(64) DEFAULT NULL COMMENT 'col3',
`id` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('a', '2018-12-18 21:37:24', '未', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('a', '2018-12-19 09:37:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('a', '2018-12-19 21:37:24', '未', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('b', '2018-11-18 21:37:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('b', '2018-11-19 20:37:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('b', '2018-11-20 09:37:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('c', '2018-11-18 21:47:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('c', '2018-11-19 20:57:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('c', '2018-11-20 09:33:24', '未', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('d', '2018-12-18 21:17:24', '未', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('d', '2018-12-19 09:17:24', '归', '');
INSERT INTO `t_test` (`col1`, `col2`, `col3`, `id`) VALUES ('d', '2018-12-19 21:17:24', '归', '');

根据某个字段去重 根据另一个字段排序的一个SQL的更多相关文章

  1. mysql DISTINCT根据某字段去重同时查出其他字段

    mysql有个关键字distinct用来去重的,但是使用时只能放在查询字段的最前边,如: SELECT DISTINCT user_id,age FROM t_user;若不是放在最前边,如:SELE ...

  2. MySql 去重且指定某字段在前的排序方法

    今天遇到一个棘手的数据查找并去重的问题: 情况: 1.取出数据库中的数据: 2.同一字段A,不同情况<值,如A值为:a1,a2>下取出的其他数据可能相同: 3.将2情况下的重复数据< ...

  3. sql针对某一字段去重,并且保留其他字段

    今天客户提了一个小需求,希望我能提供一条sql语句,帮助他对数据中 _field 这个字段的值去重,并且保留其他字段的数据.第一反应是select distinct,但这种语句在对某个字段去重时,无法 ...

  4. DataTable根据字段去重

    DataTable根据字段去重 最近需要对datatable根据字段去重,在网上搜了很多,找到了一个方法,代码如下 public static DataTable DistinctSomeColumn ...

  5. oracle 多字段去重查询

      oracle 多字段去重查询 CreationTime--2018年6月29日15点11分 Author:Marydon 1.情景展示 需要对表BASE_MRI_DEVICE的COMPNAME.F ...

  6. C#NPOI.RabbitMQ.EF.Attribute.HttpRuntime.Cache.AD域.List<T>根据指定字段去重.前端JQuery.Cache.I18N(多语言).data-xx(自定义属性)

    使用NPOI 操作Excel 个人使用的电脑基本默认安装Excel 操作起来 调用Excel的组件便可.如果是一台服务器.没有安装Excel,也就无法调用Excel组件. 在此推荐第三方插件.NPOI ...

  7. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  8. LINQ解决依据某个字段去重

    想要List结果反复 的数据非常easy.仅仅要.Dinstinct()就好了 可是假设想要依据某个字段去除反复的数据,上面的方法就帮不上忙了.我们须要重写一个方法.直接上样例吧 [Serializa ...

  9. java steam List指定字段去重

    如:角色去重处理 baseRoleList = baseRoleList.stream().collect(Collectors.collectingAndThen(Collectors.toColl ...

  10. List使用Stream流进行集合Collection的各种运算汇总:对BigDecimal求和,某个字段的和、最大值、最小值、平均值,字段去重,过滤等

    写Java接口的朋友都知道,Java 8的更新,经常会用到过滤 list<Object> 里的数据,本文就对List使用Stream流进行集合Collection的各种运算做一个汇总! 优 ...

随机推荐

  1. mysql批量修改列名为小写

    --  bo_project_info 为表名 SELECT concat( 'alter table ', 'bo_project_info', ' change column ', COLUMN_ ...

  2. SpringBoot(十一):springboot2.0.2下配置mybatis generator环境,并自定义字段/getter/settetr注释

    Mybatis Generator是供开发者在mybatis开发时,快速构建mapper xml,mapper类,model类的一个插件工具.它相对来说对开发者是有很大的帮助的,但是它也有不足之处,比 ...

  3. mysql存储过程实例,查询多参数赋值

    drop procedure if exists p_for_create_customer; create procedure p_for_create_customer()begin declar ...

  4. maven scope 范围讲解

    解决办法: <dependency>     <groupId>javax.servlet</groupId>     <artifactId>java ...

  5. C#使用HttpWebRequest和HttpWebResponse上传文件示例

    C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System;using System.Colle ...

  6. 使用 Python 将 HTML 转成 PDF

    背景 很多人应该经常遇到在网上看到好的学习教程和资料但却没有电子档的,心里顿时痒痒, 下述指导一下大家,如何将网站上的各类教程转换成 PDF 电子书. 关键核心 主要使用的是wkhtmltopdf的P ...

  7. springBoot于tomcat7搭建websocket服务

    最近在项目中需要服务端进行推送服务,于是决定使用webSocket进行双向通讯.刚开始觉得应该没问题,参考网上的博客进行开发配置.我们的开发环境使用的是springBoot.tomcat7.servl ...

  8. python - Linux C调用Python 函数

    1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...

  9. TLB的作用及工作原理

    TLB的作用及工作过程 以下内容摘自<步步惊芯——软核处理器内部设计分析>一书 页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得 ...

  10. Linux报swap空间占用过高,但物理内存还有空余

    收到报警,swap空间占用过高,登录到系统查看内存使用详情,看到物理内存还有很多未使用 问题分析 Swap配置对性能的影响分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如 ...