Mysql 计算一个月内每天的id
我在mysql中为一家医院建立了一个数据库,其中的列是:id、entry\u date、exit\u date最后两列是医院患者的入口和出口。 我想数一数每个月每天的病人人数 计算给定一天的ID数的代码相对简单,如前所述,但我不知道如何计算整个月内每天的ID数Mysql 计算一个月内每天的id,mysql,Mysql,我在mysql中为一家医院建立了一个数据库,其中的列是:id、entry\u date、exit\u date最后两列是医院患者的入口和出口。 我想数一数每个月每天的病人人数 计算给定一天的ID数的代码相对简单,如前所述,但我不知道如何计算整个月内每天的ID数 Day 2019-09-01: x patients Day 2019-09-02: y patients Day 2019-09-03: z patients . . . x + y + z + ... = total patients
Day 2019-09-01: x patients
Day 2019-09-02: y patients
Day 2019-09-03: z patients
.
.
.
x + y + z + ... = total patients on each day for all days of september
选择Countid作为patientsday
来自SAP
其中输入日期为“2019-05-02”
或退出日期为空
医院='X'
首先,假设每天至少有一名患者进入这家医院,我会写一个临时表,包含所有可能的日期,称为all_日期 第二,我将创建一个临时表,将您拥有的表与所有_日期连接起来。在这种情况下,我们的想法是复制id。对于患者在医院内的每一天,您的桌子上都会有与这一天相关的id。例如,在您的桌子看起来像这样之前:
id entry_date exit_date
1 2019-01-01 2019-01-05
2 2019-01-03 2019-01-04
3 2019-01-10 2019-01-15
id possible_dates
1 2019-01-01
1 2019-01-02
1 2019-01-03
1 2019-01-04
1 2019-01-05
2 2019-01-03
2 2019-01-04
3 2019-01-10
3 2019-01-11
3 2019-01-12
3 2019-01-13
3 2019-01-14
3 2019-01-15
使用联接表,您的表将如下所示:
id entry_date exit_date
1 2019-01-01 2019-01-05
2 2019-01-03 2019-01-04
3 2019-01-10 2019-01-15
id possible_dates
1 2019-01-01
1 2019-01-02
1 2019-01-03
1 2019-01-04
1 2019-01-05
2 2019-01-03
2 2019-01-04
3 2019-01-10
3 2019-01-11
3 2019-01-12
3 2019-01-13
3 2019-01-14
3 2019-01-15
最后,您所要做的就是计算每天有多少ID
以下是此解决方案的完整查询:
WITH all_dates AS (
SELECT distinct entry_date as possible_dates
FROM your_table_name
),
patients_per_day AS (
SELECT id
, possible_dates
FROM all_dates ad
LEFT JOIN your_table_name di
ON ad.possible_dates BETWEEN di.entry_date AND di.exit_date
)
SELECT possible_dates, COUNT(ID)
FROM patients_per_day
GROUP BY 1
另一种可能的解决方案是,采用几乎相同的策略,仅更改连接的条件,如下所示:
WITH all_dates AS (
SELECT distinct entry_date as possible_dates
FROM your_table_name
),
date_intervals AS (
SELECT id
, entry_date
, exit_date
, datediff(entry_date, exite_date) as date_diference
FROM your_table_name
),
patients_per_day AS (
SELECT id
, possible_dates
FROM all_dates ad
LEFT JOIN your_table_name di
ON datediff(ad.possible_dates,di.entry_date)<= di.date_diference
)
SELECT possible_dates, COUNT(ID)
FROM patients_per_day
GROUP BY 1
这将对所有日期的条目数进行细分。您可以修改选择以添加特定的月份和/或年份
SELECT
CONCAT(YEAR, '-', MONTH, '-', DAY) AS THE_DATE,
ENTRIES
FROM (
SELECT
DATE_FORMAT(entry_date, '%m') AS MONTH,
DATE_FORMAT(entry_date, '%d') AS DAY,
DATE_FORMAT(entry_date, '%Y') AS YEAR,
COUNT(*) AS ENTRIES
FROM
saps
GROUP BY
MONTH,
DAY,
YEAR
) AS ENTRIES
ORDER BY
THE_DATE DESC
当患者处于活动状态时,退出日期将为空,我如何了解此想法?使用当前退出日期作为活动患者的退出日期