[英]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.