我有一个表q_data像这样:

cuid  timestamp_from        timestamp_to
A1    2014-12-01 22:04:00   2014-12-01 22:04:21
A1    2014-12-04 22:05:00   2014-12-04 22:05:25
A2    2014-12-06 20:04:00   2014-12-06 20:04:21
A2    2014-12-07 19:04:00   2014-12-07 19:04:21


和一个表patients_像这样:

cuid    last_visit
A1      2014-12-03
A2      2014-12-05


我希望计算q_data中每个cuid的行数,以使timestamp_to早于Patient_中的last_visit日期。因此,对于上面显示的数据,我希望我的查询给出以下结果。

cuid   day_count
A1     1
A2     1


我正在尝试使用以下查询执行此操作:

create table tmp
    select
        q.cuid as cuid,
        count(distinct(q.query_to)) as day_count
    from q_data q
    inner join patients_ p on q.cuid = p.cuid
    group by q.cuid
    having datediff(p.last_visit, date(q.query_to)) >= 0
;


但我得到一个错误:

ERROR 1054 (42S22): Unknown column 'p.last_visit' in 'having clause'


如果有人可以帮助我理解查询中的错误,我将不胜感激。谢谢。

最佳答案

您选择的查询

select
q.cuid as cuid,
count(distinct(q.query_to)) as day_count
from q_data q
inner join patients_ p on q.cuid = p.cuid
group by q.cuid
having datediff(p.last_visit, date(q.query_to)) >= 0;


如果在您的haveing子句中有密切注意,您使用了不属于select的2列,这是无效的,并且在您现在获取时会出现错误。

您可以做的一件事是将where clause中的内容移动为

select q.cuid as cuid, count(distinct(q.query_to)) as day_count
from q_data q
inner join patients_ p on q.cuid = p.cuid
where datediff(p.last_visit, date(q.query_to)) >= 0
group by q.cuid

07-24 09:38
查看更多