yhdata_DWFD0T2H白银三
前天 15:39 发布在问答
如何计算日期区间的数据
打个比方比如张三从二十六号请假到二十八号,一共三天,然后李四从二十六号请假到二十七号一共两天,
我现在想计算出这三天的请假人数,正常应该是二十六号两个人,二十七号两个人,二十八号一个人的, 现在只有二十六号是两个人,二十七号和二十八号都没有数据,这个问题如何实现
79
9
精彩评论9
yhdata_lyaa
发表于 前天 15:56 显示全部楼层
你的数据是怎么存放的,有哪些字段呢,截图看看,怎么算出只有二十六号是两个人的
回复

使用道具 2#

yhdata_DWFD0T2H白银三 回复yhdata_lyaa
发表于 2025-02-28 16:02:41
请假开始日期,请假结束日期,请假人 我是通过count来计算请假人数的,但是这种算出来的数据不对
回复

yhdata_DWFD0T2H白银三 回复yhdata_lyaa
发表于 2025-02-28 16:47:45
这个有其他的方式来实现吗?
回复

yhdata_DWFD0T2H白银三
发表于 前天 16:00 显示全部楼层
请假开始日期,请假结束日期,请假人
我是通过count来计算请假人数的,但是这种算出来的数据不对
回复

使用道具 3#

yhdata_lyaa
发表于 前天 16:40 显示全部楼层
这个数据结构算不了,用sql试试呢,
sql实现思路
生成日期序列:我们需要一个日期序列,覆盖所有请假日期范围(从最早的开始日期到最晚的结束日期)。
统计每天的请假人数:通过连接请假记录表和日期序列表,统计每一天的请假人数。
回复

使用道具 4#

yhdata_DWFD0T2H白银三 回复yhdata_lyaa
发表于 2025-02-28 18:00:03
能提供一个sql吗?
回复

yhdata_DWFD0T2H白银三 回复yhdata_lyaa
发表于 2025-02-28 18:00:27
这个是不是要写一个数组呢?
回复

yhdata_lyaa
发表于 前天 18:12 显示全部楼层

假设我们有一个名为 leave_requests 的表,用于存储请假记录,表结构如下:
leave_requests
----------------
id          INT (主键,自增)
name        VARCHAR (请假人姓名)
start_date  DATE (请假开始日期)
end_date    DATE (请假结束日期)


SQL实现
WITH RECURSIVE date_sequence AS (
    -- 递归的初始部分:选择最小的开始日期
    SELECT MIN(start_date) AS date
    FROM leave_requests
    UNION ALL
    -- 递归部分:每次增加一天,直到最大的结束日期
    SELECT date + INTERVAL 1 DAY
    FROM date_sequence
    WHERE date < (SELECT MAX(end_date) FROM leave_requests)
),
leave_counts AS (
    -- 统计每一天的请假人数
    SELECT ds.date, COUNT(lr.name) AS leave_count
    FROM date_sequence ds
    LEFT JOIN leave_requests lr
    ON ds.date BETWEEN lr.start_date AND lr.end_date
    GROUP BY ds.date
)
-- 查询结果
SELECT date AS "日期", leave_count AS "请假人数"
FROM leave_counts
ORDER BY date;

回复

使用道具 5#

隔壁老帆白银二
发表于 昨天 09:54 显示全部楼层
参考楼上sql
回复

使用道具 6#

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
100W

用户等你来哦

Copyright   ©2012-2025  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部