mysql列字段多类型CASE、WHEN与时间字符 类型date_format格式化使用

本文介绍了一种从数据库中查询员工考勤记录的方法,包括工号、姓名、组织名称等详细信息,并通过CASE语句实现了对员工情绪状态的分类。

作者官方网站:http://www.wxl568.cn

select l.empCode             "工号",
       l.empName             "姓名",
       l.orgName             "组织名称",
       l.posname             "职位名称",
       date_format(l.clockTime,'%Y-%m-%d')           "打卡日期",
       date_format(l.clockTime,'%H:%i:%S')  "打卡时间",
       
        CASE l.RESERVE3 WHEN 100 THEN "开心"
  WHEN 200 THEN "一般" 
    WHEN 300 THEN "不开心"
   ELSE "未开放" END
as "情绪",
       l.addressName         "考勤点名称",
       l.outsideClockAddress "外勤地址",
       l.macAddress          "MAC网卡",
       l.clVersion           "版本号"
  from tt_big_clock_log_data l

SELECT DATE_FORMAT(first_order_time, '%Y-%m') AS 月份, COUNT(user_phone) AS 总订单, COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-01' THEN user_phone END) AS '2025年1月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-02' THEN user_phone END) AS '2025年2月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-03' THEN user_phone END) AS '2025年3月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-04' THEN user_phone END) AS '2025年4月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-05' THEN user_phone END) AS '2025年5月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-06' THEN user_phone END) AS '2025年6月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-07' THEN user_phone END) AS '2025年7月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-08' THEN user_phone END) AS '2025年8月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-09' THEN user_phone END) AS '2025年9月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-10' THEN user_phone END) AS '2025年10月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-11' THEN user_phone END) AS '2025年11月(成交)', COUNT(DISTINCT CASE WHEN DATE_FORMAT(final_delivery_time, '%Y-%m') = '2025-12' THEN user_phone END) AS '2025年12月(成交)' FROM ( SELECT o.user_phone, MIN(o.order_create_time) AS first_order_time, MAX(CASE WHEN o.order_status IN ('4','41','42','5','8','9','10','12','13','14','15','121','122','131') THEN o.order_delivery_time END) AS final_delivery_time FROM orders o LEFT JOIN orders_info_source s ON s.order_id = o.order_id LEFT JOIN source c ON c.identify = s.source WHERE o.user_phone NOT IN ( '13828732621','13530358933','18358889349','13713666003','18038032144','18565399454', '18683409156','18254701866','18907432501','13430561693','14776231050','13543336115', '18973513561','18735590366','18823462817','18682291432','18503022713','19129425190', '17681043696','13544004613','13728731424','15989379809','19854594695','15989379809', '13590480601','14797635860','16602837041','13536880980','16602837041','17633834697', '13544004613','18318452072','13138615524','13078687152','15119332972','17724600370', '13787964520','18681078176','16607486252','18566230353','18824797256','15219857297' ) AND o.platform = 1 AND o.goods_id <> 6233 AND o.order_type <> '3' AND o.order_create_time BETWEEN '2025-01-01 00:00' AND '2025-12-31 23:59' AND o.order_status IN ('4','41','42','5','6','7','71','8','9','10','12','13','14','15','121','122','131') -- AND c.label LIKE 'A2%' and (o.deposit_free <> 1 and (o.add_pay_periods <> 0 or nt.order_id is null)) -- 非直发 GROUP BY o.user_phone ) AS user_orders GROUP BY 月份 ORDER BY 月份; 按月份为分组,左边列是下单的日期,但是下单之后不一定成交,要查询出该订单最后一次下单日期并且成交的,如1月下单的客户有可能是2月才第二次下单成交,有可能是3月再次下单成交的,需要查出第一次下单,最后在哪个月份成交的订单数据 字段:o.order_create_time下单日期,o.order_delivery_time发货日期,o.order_id订单号,o.order_status订单状态, 优化sql写一下完整sql
最新发布
06-28
任务描述 本关任务:根据要求编写符合输出条件的SQL。 相关知识 略 日期函数 本章节介绍MySQL中的日期时间函数,下面列出常用的函数: 函数 说明 NOW() 当前日期和时间 CURDATE() 当前日期 CURTIME() 当前时间 DATE_ADD() 日期变化 DATEDIFF() 日期差值 DATE_FORMAT() 日期格式化 YEAR() 返回日期的年份 MONTH() 返回日期的月份 WEEK() 返回日期的周号 NOW()、CURDATE()和CURTIME() NOW()返回当前日期和时间; CURDATE()则单独返回当前日期,CURTIME()则返回当前时间DATE_ADD()、DATEDIFF()和DATE_FORMAT() DATE_ADD()从函数名称来看会想当然的认为是时间的添加,但其实可以添加也可以减少,因此我们将其说明为日期的变化,第一个参数为指定时间,第二个参数为增加(减少)的单位值(YEAR、MONTHS、WEEK、DAY); DATEDIFF()函数则返回二个日期之间的差值; DATE_FORMAT()函数为日期格式化,也就是将我们常见的日期格式转换成另一种格式。 以下是在format字符串中常用的说明符,更多的说明符可在 MySQL 官方文档中进行查看: 格式 描述 %d 月的天,数值(00-31) %H 小时 (00-23) %h 小时 (01-12) %m 月,数值(00-12) %p AM 或 PM %s 秒(00-59) %T 时间,24-小时(hh:mm:ss) %Y 年,4 位 YEAR()和MONTH() 流程控制类函数 函数 说明 IF() 判断,流程控制 IFNULL() 字段值是否为空 CASE 搜索语句 IF()函数:IF(a,b,c) 如果a为真返回b,否则返回c; IFNULL()函数:IFNULL(a,b) 如果a不为null返回a,否则返回b; CASECASE WHEN a then b end 判断如果a为真返回b。 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 查询所有学生的出生年份及至2019-01-01时的年龄; 查询所有课程中的最高分、最低分、平均分和及格率,按课程
05-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值