[英]The right SQL or ActiveRecord formulation for complex query in Rails
我有一個帶有表sendiment_records的ActiveRecord模型SentimentRecords,其中每個記錄都具有以下屬性:user_id,sentiment_id,lecture_id和時間戳。 我的查詢:給定一個LECTURE_ID和一個DATETIME,對於每個sentiment_id,我想要一個計數來記錄每個sendiment_id的user_id的數量。 對於每個user_id,僅計算最新時間戳<=給定日期時間。
這是無效的公式:
SentimentRecords.find_by_sql
("SELECT sentiment_id,count(*)
FROM sentiment_records WHERE id
IN (SELECT max(id) FROM sentiment_records
WHERE lecture_id=LECTURE_ID GROUP BY user_id
WHERE timestamp <= DATETIME) GROUP BY sentiment_id")
我不確定我是否理解要求,但是我認為您需要類似這樣的SQL。
select s1.sentiment_id, count(s1.user_id)
from sentiment_records s1
inner join (
select user_id, max(timestamp) as timestamp
from sentiment_records
where timestamp <= ?
and lecture_id = ?
group by user_id
) s2 on s1.user_id = s2.user_id and s1.timestamp = s2.timestamp
where lecture_id = ?
group by s1.sentiment_id;
感謝Nick Marden,這是正確的查詢:
SentimentRecords.connection.select_all("SELECT sentiment_id, COUNT(*) FROM sentiment_records WHERE id IN (SELECT MAX(id) FROM sentiment_records WHERE lecture_id = LECTURE_ID AND timestamp < DATETIME GROUP BY user_id) GROUP BY sentiment_id")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.