当前位置: 首页 > news >正文

项目中遇到的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;

相关文章:

  • 数据库增删改查复习
  • 如何将大华dav视频转mp4?一键无损清晰转换~
  • Layui实现删除及修改后停留在当前页
  • 将main打包成jar;idea打包main为jar包运行
  • 记录一下小程序自定义导航栏消息未读已读小红点,以及分组件的消息数量数据实时读取
  • 外包干了5天,技术明显退步。。。。。
  • 挑战杯 车位识别车道线检测 - python opencv
  • HTML_CSS练习:HTML注释
  • PostgreSQL中vacuum 物理文件truncate发生的条件
  • 高效使用git流程分享
  • 【数据结构与算法】:非递归实现快速排序、归并排序
  • 从零开始学HCIA之SDN04
  • 苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)
  • Redis
  • 市场复盘总结 20240318
  • TimescaleDB 开源时序数据库
  • LinearLayout和RelativeLayout对比
  • 基于vue实现bilibili网页
  • 物联网数据驾驶舱
  • 基于centos7的k8s最新版v1.29.2安装教程
  • 河南信阳拟发文严控预售许可条件:新出让土地开发的商品房一律现房销售
  • 来伊份发布关于消费者反映蜜枣粽问题处理的情况说明:与消费者达成和解
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • 上海下周最高气温在30℃附近徘徊,夏天越来越近
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 巴基斯坦外长:印巴停火