Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据从第一个表开始的日期连接两个表_Sql_Oracle - Fatal编程技术网

Sql 根据从第一个表开始的日期连接两个表

Sql 根据从第一个表开始的日期连接两个表,sql,oracle,Sql,Oracle,我有如下两个表格(日期格式:yyyy-MM-dd): 1) 表1-手术 P_ID | SURGERY_DATE ------------------------------------------------ 1 | 2012-04-01 2 | 2012-08-14 1 | 2012-07-22 4 | 2012-10-30 3 | 2012-06-07 2) 表2-参观 P_I

我有如下两个表格(日期格式:yyyy-MM-dd):

1) 表1-手术

P_ID        | SURGERY_DATE
------------------------------------------------
1           | 2012-04-01
2           | 2012-08-14
1           | 2012-07-22
4           | 2012-10-30
3           | 2012-06-07
2) 表2-参观

P_ID        | VISIT_DATE 
-----------------------------------------
1           | 2012-03-28 
1           | 2012-04-14
1           | 2012-05-17
1           | 2012-09-12 
3           | 2012-07-15 
4           | 2012-10-10 
3           | 2012-06-01 
手术表和就诊表是从其他表合并而来的。我想查找符合以下条件的所有记录:就诊日期>=手术日期

3) 结果表

EMPLOYEE_ID | SUGERY_DATE | NUMBER OF VISIT
-------------------------------------------------------
1           | 2012-04-01 |    4
2           | 2012-08-14 |    0
1           | 2012-07-22 |    2
4           | 2012-10-30 |    1
3           | 2012-06-07 |    1

您可以使用相关子查询:

select s.*,
       (select count(*)
        from visit v
        where v.p_id = s.p_id and v.visit_date > s.surgery_date
       ) as num_visits_after
from surgery s;

您需要使用group by和count,并满足以下条件:

SELECT
    S.P_ID,
    S.SURGERY_DATE,
    SUM(CASE
        WHEN V.VISIT_DATE > S.SURGERY_DATE THEN 1
    END) AS NUM_VISITS_AFTER
FROM
    SURGERY S
    LEFT JOIN VISIT V ON ( S.P_ID = V.P_ID )
GROUP BY
    S.P_ID,
    S.SURGERY_DATE;

干杯

使用分组和计数可以解决您的问题

请尝试下面的代码


()

请向我们显示您的代码并指出您遇到的问题。您的逻辑不清楚,为什么第二个1的访问次数是2?在前一次手术之前不应该考虑访问,请不要将代码作为图像,而是以纯文本形式发布。很抱歉,我很难发布答案,因为StAdvFoad表示在我的答案中有一个无效字符。