2012-10-19 37 views
0

我有一个工作的查询,让我的maxDate的最小和最大日期:获得在同一个查询

SELECT a.client_id AS client_id 
    , a.patientcount AS patientcount 
    , received_date AS maxRecDate 
FROM 
(
    SELECT DISTINCT CLIENT_ID 
    , PATIENT_ID 
    , count(*) over (partition by client_id, patient_id) AS patientcount 
    from f_accession_daily 
) AS a 
JOIN F_ACCESSION_DAILY AS f ON a.CLIENT_ID = f.CLIENT_ID 
    AND a.PATIENT_ID = f.PATIENT_ID 
GROUP BY f.RECEIVED_DATE, a.CLIENT_ID, a.patientcount 
HAVING f.RECEIVED_DATE = MAX(f.received_date) 

在相同的查询,我也想回分钟(f.received_date)。

有没有办法做到这一点?也许与子查询?

+4

,请escpecially提供您表的结构,如果你的问题是所有关于'sql'。它帮助很多。 –

+0

你想把最短日期放在有或选择? – PseudoToad

+0

@Gizmo我想要能够返回最大和最小日期 –

回答

2

我可能失去了一些东西,但我不明白你为什么要通过f.RECEIVED_DATE

分组我想查询可能是:

SELECT a.client_id AS client_id 
    , a.patientcount AS patientcount 
    , max(f.received_date) AS maxRecDate 
    , min(f.received_date) AS minRecDate 
FROM 
(
    SELECT DISTINCT CLIENT_ID 
    , PATIENT_ID 
    , count(*) over (partition by client_id, patient_id) AS patientcount 
    from f_accession_daily 
) AS a 
JOIN F_ACCESSION_DAILY AS f ON a.CLIENT_ID = f.CLIENT_ID 
    AND a.PATIENT_ID = f.PATIENT_ID 
GROUP BY a.CLIENT_ID, a.patientcount 

我没有测试过这一点,但我认为它应该工作。

1

在您的查询中,添加OR条件以检查MIN日期。解决以供将来参考问题

SELECT a.client_id AS client_id 
, a.patientcount AS patientcount 
, received_date AS maxRecDate 
FROM 
(
SELECT DISTINCT CLIENT_ID 
, PATIENT_ID 
, count(*) over (partition by client_id, patient_id) AS patientcount 
from f_accession_daily 
) AS a 
JOIN F_ACCESSION_DAILY AS f ON a.CLIENT_ID = f.CLIENT_ID 
AND a.PATIENT_ID = f.PATIENT_ID 
GROUP BY f.RECEIVED_DATE, a.CLIENT_ID, a.patientcount 
HAVING f.RECEIVED_DATE = MAX(f.received_date) 
OR f.RECEIVED_DATE = MIN(f.received_date) -- Newly added condition 
+0

非常感谢你,这几乎是完美的。事情是我需要为同一客户和病人选择最大和最小值 –