You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

医院脚本开发:按周(含周数)展示数据的实现难题

解决医院排班数据按周分组展示的问题

我明白你遇到的困扰了——你尝试用GROUP BY Week(sdate)来按周分组展示排班数据,但没得到预期效果,这是因为GROUP BY是用来聚合统计数据的(比如计数、求和),而你需要的是按周分组保留原始记录并格式化展示,两者的用途完全不同。

问题分析

你的数据里已经自带了week字段,不需要再通过sdate计算周数。GROUP BY会把同一周的所有行合并成一行(配合聚合函数使用),这会丢失你需要保留的每条排班记录,自然达不到你要的展示格式。

解决方案:按周逻辑分组并展示

你需要先将数据按week排序,然后按周进行逻辑分组(不是聚合),再逐组输出标题、表头和记录。下面用Python代码举个实际例子,其他编程语言(比如JavaScript、Java)的思路是一致的:

from itertools import groupby

# 模拟你的原始数据(可以替换成从数据库查询到的数据集)
shift_data = [
    {"nurse": 1, "ward": 2, "shift": "1st", "sdate": "2019-08-08", "week": 32},
    {"nurse": 1, "ward": 3, "shift": "2nd", "sdate": "2019-08-09", "week": 32},
    {"nurse": 1, "ward": 3, "shift": "1st", "sdate": "2019-08-10", "week": 32},
    {"nurse": 1, "ward": 1, "shift": "2nd", "sdate": "2019-08-12", "week": 33},
    {"nurse": 1, "ward": 2, "shift": "3rd", "sdate": "2019-08-13", "week": 33},
    {"nurse": 1, "ward": 4, "shift": "2nd", "sdate": "2019-08-15", "week": 33},
    {"nurse": 1, "ward": 2, "shift": "1st", "sdate": "2019-08-19", "week": 34},
]

# 第一步:按week字段排序(groupby要求数据先按分组键排序)
sorted_shifts = sorted(shift_data, key=lambda item: item["week"])

# 第二步:按week分组并格式化输出
for week_number, group in groupby(sorted_shifts, key=lambda item: item["week"]):
    # 输出周标题
    print(f"Week {week_number}")
    # 输出表头
    print("Ward Shift Date")
    # 输出当前周的每条排班记录
    for shift in group:
        print(f"{shift['ward']} {shift['shift']} {shift['sdate']}")
    # 空行分隔不同周的数据
    print()

如果用SQL查询数据

如果你是从数据库取数,不需要用GROUP BY,只需要按week和sdate排序即可,把分组展示的逻辑交给应用层处理:

SELECT nurse, ward, shift, sdate, week
FROM your_table_name
ORDER BY week ASC, sdate ASC;

这样查询出来的数据已经按周和日期排好序,之后用上面的分组逻辑处理就能得到你想要的展示格式。

内容的提问来源于stack exchange,提问作者user2178637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:10:33