2015-07-20 55 views
0

我有一個「成員」表是這樣的:整蠱GROUP BY SQL與附加約束

id status user_id created_at 
----------------------------------- 
1 active 1   2015-07-01 
2 active 2   2015-07-01 
3 inactive 1   2015-07-04 
4 deleted 2   2015-07-04 
5 active 3   2015-07-04 
6 active 1   2015-07-08 
7 inactive 3   2015-07-08 

怎麼可能在任何給定日期查詢所有用戶的最新狀態?

對於2015年7月1日輸出應爲:

id status user_id created_at 
----------------------------------- 
1 active 1   2015-07-01 
2 active 2   2015-07-01 

對於2015年7月5日輸出應爲:

id status user_id created_at 
----------------------------------- 
3 inactive 1   2015-07-04 
4 deleted 2   2015-07-04 
5 active 3   2015-07-04 

對於2015-07- 10輸出應該是:

id status user_id created_at 
----------------------------------- 
3 active 1   2015-07-08 
4 deleted 2   2015-07-04 
5 inactive 3   2015-07-08 

非常感謝任何幫助!

回答

1

使用group bywhere指定日期前得到最新的日期,然後加入:

select m.* 
from members m join 
    (select user_id, max(created_at) as maxca 
     from members 
     where created_at <= '2015-07-08' -- or whatever 
     group by user_id 
    ) mu 
    on m.user_id = mu.user_id and m.created_at = mu.maxca; 
+0

這隻能返回一行,並不適用於所有的行user_id說明 – santacruz

+0

@santacruz。 。 。這應該爲每個用戶ID返回一行。設置一個SQL小提琴,所以我可以看到你在做什麼。 –

+0

對不起,@gordon。你是對的,它的工作原理! http://sqlfiddle.com/#!9/b362b/2 – santacruz