从两个表中获取每日报告

Getting the daywise report from two tables

我想从两个 table

生成日间报告

Table 1: opd

CREATE TABLE `opd` (
  `id` int(50) NOT NULL,
  `Date` date NOT NULL,
  `time` time NOT NULL,
  `opd_no` varchar(150) NOT NULL,
  `patientid` varchar(150) DEFAULT NULL,
  `name` varchar(150) NOT NULL,
);

Table结构

id Date Time opd_no Patient_id name
1 2022-03-02 18:30:10 OPD/2122/1 PT01 Siba
2 2022-03-03 18:30:10 OPD/2122/2 PT02 Deba
3 2022-03-04 18:30:10 OPD/2122/3 PT03 Haris
4 2022-03-04 18:31:10 OPD/2122/4 PT04 ravish

Table 2: ipd_pn

CREATE TABLE `ipd_pn` (
  `id` int(11) NOT NULL,
  `ipd_no` varchar(40) DEFAULT NULL,
  `patientid` varchar(170) NOT NULL,
  `opd_reg_date` date DEFAULT NULL,
  `time` time DEFAULT NULL,
  `opd` varchar(40) DEFAULT NULL,
  `date` date DEFAULT NULL,
)

Table结构

id IPD_no Patient_id opd_Reg_date time opd_no date
1 IPD/2122/1 PT01 2022-03-02 15:40:10 OPD/2122/1 2022-03-02
2 IPD/2122/2 PT03 2022-03-04 16:35:10 OPD/2122/3 2022-03-03
3 IPD/2122/3 PT02 2022-03-03 15:45:10 OPD/2122/2 2022-03-03

T 尝试在白天生成以下查询生成的 opdno 数量

SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd 
WHERE (date BETWEEN '2022-02-1' AND '2022-03-28')
GROUP BY Date

得到如下输出

date total_opd
2022-03-02 1
2022-03-03 1
2022-03-04 2

但是我无法生成在这个日期期间生成了多少 ipd no。

请帮忙。

我想要一份如下的报告

date total_opd total_ipd
2022-03-02 1 1
2022-03-03 1 1
2022-03-04 2 1

我试过连接查询,即

SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd 0 
INNER JOIN ipd_pn i ON o.Date = i.date
WHERE (date BETWEEN '2022-02-1' AND '2022-02-28')
GROUP BY Date

但这会导致日期歧义错误。

所以请尝试帮助我如何从 table 中生成报告。

您可以尝试使用 UNION ALL 在子查询中组合两个表,然后使用标志列来表示来自 opdipd_pn

的行
SELECT date,
       SUM(flag = 1) total_opd,
       SUM(flag = 2) total_ipd
FROM (
    SELECT DATE(Date) AS date, 1 flag
    FROM opd 
    UNION ALL
    SELECT Reg_date,2
    FROM ipd_pn
) t1
WHERE date between '2022-02-1' and '2022-03-28'
GROUP BY Date

sqlfiddle