项目中遇到的sql问题记录

有一张表,表结构及数据如下:

INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve001', '2021-02-18 00:00:00', 'tableA', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve002', '2021-02-18 00:05:00', 'tableB', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve002', '2021-02-18 00:05:00', 'tableB', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve003', '2022-05-18 00:05:00', 'tableC', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve003', '2021-03-18 00:05:00', 'tableC', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve003', '', 'tableC', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve004', '', 'tableB', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve004', '', 'tableA', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve005', '2023-02-18 00:05:00', 'tableD', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve005', '2023-03-18 00:05:00', 'tableD', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve006', '', 'tableC', '2024-03-18');
INSERT INTO `test`.`test_approve`(`approve_no`, `tra_date`, `tablename`, `part_dt`) VALUES ('approve006', '2024-03-18 00:05:00', 'tableB', '2024-03-18');

在这里插入图片描述

  • 根据表名依次排序
SELECT approve_no, tra_date, tablename, part_dt
FROM test_approve
WHERE tablename IN ('tableC', 'tableD', 'tableB', 'tableA')
ORDER BY 
    CASE tablename
        WHEN 'tableC' THEN 1
        WHEN 'tableD' THEN 2
        WHEN 'tableB' THEN 3
        WHEN 'tableA' THEN 4
        ELSE 5  -- 处理其他表名
    END;

在这里插入图片描述

  • tra_date 不为空(‘’)
	SELECT approve_no, tra_date, tablename, part_dt
FROM test_approve
WHERE tablename IN ('tableC', 'tableD', 'tableB', 'tableA')
    AND tra_date <>''
ORDER BY 
    CASE tablename
        WHEN 'tableC' THEN 1
        WHEN 'tableD' THEN 2
        WHEN 'tableB' THEN 3
        WHEN 'tableA' THEN 4
        ELSE 5  -- 处理其他表名
    END;	

在这里插入图片描述

  • 遇到相同的approve_no,取tra_date最大的
SELECT approve_no, tra_date, tablename, part_dt
FROM (
    SELECT approve_no, tra_date, tablename, part_dt,
           ROW_NUMBER() OVER (PARTITION BY approve_no ORDER BY tra_date DESC) AS rn
    FROM test_approve
    WHERE tablename IN ('tableC', 'tableD', 'tableB', 'tableA')
        -- AND tra_date IS NOT NULL
		--AND tra_date <>''
) sub
WHERE rn = 1
ORDER BY 
    CASE tablename
        WHEN 'tableC' THEN 1
        WHEN 'tableD' THEN 2
        WHEN 'tableB' THEN 3
        WHEN 'tableA' THEN 4
        ELSE 5  -- 处理其他表名
    END;
		
  • 相同的approve_no,优先取tableC,tableD,tableB,tableA不为空的tra_date,按表名顺序取,取到了则返回该条数据
SELECT t.approve_no, t.tra_date, t.tablename, t.part_dt
FROM (
    SELECT approve_no, tra_date, tablename, part_dt,
           ROW_NUMBER() OVER (PARTITION BY approve_no ORDER BY 
               CASE WHEN tablename = 'tableC' THEN 1
                    WHEN tablename = 'tableD' THEN 2
                    WHEN tablename = 'tableB' THEN 3
                    WHEN tablename = 'tableA' THEN 4
                    ELSE 5
               END,
               CASE WHEN tra_date <> '' THEN 0 ELSE 1 END,
               tra_date DESC) AS row_number
    FROM test_approve
) AS t
WHERE t.row_number = 1;

相关推荐

  1. 记录一次业务遇到sql问题

    2024-03-19 10:58:03       16 阅读
  2. 项目搭建mysql_rpt层,项目遇到code2问题

    2024-03-19 10:58:03       32 阅读
  3. 记录启动Dubbo-admin遇到问题

    2024-03-19 10:58:03       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 10:58:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 10:58:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 10:58:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 10:58:03       18 阅读

热门阅读

  1. Unity3D 大地图分块:分块编辑小AStar地图详解

    2024-03-19 10:58:03       16 阅读
  2. mlflow ui --backend-store-uri 参数详解

    2024-03-19 10:58:03       19 阅读
  3. 【DevOps基础篇】如何改善你的SDLC过程

    2024-03-19 10:58:03       23 阅读
  4. 力扣105---从前序与中序序列中构造二叉树

    2024-03-19 10:58:03       17 阅读
  5. C#LiteDB基本使用

    2024-03-19 10:58:03       16 阅读
  6. 【云开发笔记No.5】DevOps的价值

    2024-03-19 10:58:03       20 阅读
  7. 深入理解 C# Unity 中的事件和委托

    2024-03-19 10:58:03       14 阅读
  8. web集群(haproxy负载均衡+keepalived高可用)

    2024-03-19 10:58:03       16 阅读