簡體   English   中英

適用於Rails中復雜查詢的正確SQL或ActiveRecord公式

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

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