背景:
一张表 有 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. 学习ReentrantLock

    1. 使用ReentrantLock import java.util.concurrent.locks.ReentrantLock; public class TestReentrantLock { ...

  2. 有钱人都用iphone?

    身边的朋友用iphone, 大家都会调侃真有钱. 大数据显示, 人家是真的有钱. 看看来自腾讯移动分析数据 你玩过抖音就知道, 拍视频, 传视频的过的看着都挺滋润的. 反观用安卓的用户, 前20个应用 ...

  3. phpStorm中如何不让其自动添加封闭大括号?

    Settings > Editor > General->Smart Keys.

  4. python - Linux C调用Python 函数

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

  5. [windows+cocos2dx]文本类

    文字也是游戏最重要的元素之中的一个,以下就看看使用动态字体和静态字体库怎样创建文字.使用动态字体库创建的文字能够包括经常使用的不论什么字符,一般假设用户要输入名字,这就最好用动态字体库.由于你不知道用 ...

  6. mysql中实现字符串分割sp_split

      sp_split : DELIMITER $$ CREATE DEFINER = 'test_user'@'%' PROCEDURE sp_split (IN p_str varchar(2000 ...

  7. mysql查询前几条记录

    #My SQL 取前多少条select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select ...

  8. 为Sublime Text 设置全局启动快捷键

    为Sublime Text创建快捷方式.找到Sublime Text安装目录中的“sublime_text.exe”文件,然后右击创建快捷方式,如下图:  为Sublime Tex设置全局快捷键.将上 ...

  9. ubuntu Ros环境halcon的一个程序

    这个首先并不是我一边做实验一遍记录的,而是我做完成以后才想起来做个分享的,所以中途遇到的很多问题,并没有来得及记录下来,现在写的这些都是后话了 首先呢!我们不需要在ROS下写halcon的程序也是可以 ...

  10. Windows系统配置.bat启动spring boot项目jar

    背景:项目用spring boot构建,maven管理,本地测试好之后打成jar包,在dos窗口可以通过:java -jar demo.jar来启动demo项目,一旦关闭该dos窗口demo项目也被停 ...