2014-05-02 13 views
0

我有以下查询。我想调整为仅选择具有多个subscription_plans的user_id。举个例子,如果一个user_id 4只有一个subscription_plan_id,他就不应该出现。如何只选择那些有多个记录的用户?

如果user_id 5的subscription_plan_id是2和3,他应该显示出来。有关如何做到这一点的任何建议?

select user_id, subscription_plan_id, created_at from 
subscriptions where 
(subscription_plan_id = 47 or 
subscription_plan_id = 78) 
and created_at between '2014-01-01' and '2014-01-31'; 

回答

2

调查这些SQL关键字:

  • GROUP BY
  • HAVING
  • COUNT(DISTINCT [专栏])

好,好,我会为你做它.... [叽] ...

SELECT 
    user_id, COUNT(DISTINCT subscription_plan_id), MIN(created_at), MAX(created_at) 
FROM 
    subscriptions 
WHERE 
    created_at BETWEEN '2014-01-01' AND '2014-01-31' 
GROUP BY 
    user_id 
HAVING 
    COUNT(DISTINCT subscription_plan_id) > 1 
; 
+0

“叽” :)。这有效,但只返回第一次订阅的user_id。我如何获得该用户的所有subscription_plan_ids? – sharataka

+0

我的意思是返回订阅数量。我试图得到实际的subscription_plan_ids。 – sharataka

0

您需要使用GROUP BYHAVING筛选出具有订阅一定数量的用户,你的情况不到1 尝试是这样的

select user_id, subscription_plan_id, created_at 
from subscriptions 
where (subscription_plan_id = 47 or 
    subscription_plan_id = 78) 
    and created_at between '2014-01-01' and '2014-01-31' 
    AND user_id IN (SELECT user_id FROM subscriptions ss 
        GROUP BY ss.user_id 
        HAVING COUNT(subscription_plan_id) > 1) ;