簡體   English   中英

根據從聯接評估的條件對mysql表中的字段進行計數

[英]Doing a count on a field in a mysql table based on a condition evaluated from a join

我有一個表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, COUNT(*) as day_count 
FROM 
  patients_ as p
LEFT JOIN 
  q_data as q 
ON 
  (p.cuid = c.cuid )
WHERE 
  (DATE(q.query_to) < p.last_visit)
GROUP BY 
  q.cuid

您選擇的查詢

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 

如果select中沒有可用的字段,則無法指定

create table tmp
    select
        q.cuid as cuid,
        p.last_visit as last_visit,
        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
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM