2014-04-24 50 views
2

我存儲tweets,twitter用戶,並將twitter用戶分組。SQL限制和排序通過跨連接

我有以下4個表

鳴叫:

tweet_id | user_id | created 
------------------------------- 
23452345 | 2345 | 2013-08-12 
23456094 | 1234 | 2014-03-24 
23097777 | 1234 | 2014-04-12 
23948798 | 9999 | 2013-09-22 

twitter_users:

user_id | screen_name 
------------------------ 
2345 | michael 
1234 | david 
9999 | not_interested 

twitter_social:

user_id | social_id 
--------------------------- 
2345 | 34 
9999 | 20 
1234 | 80 

social_categories:

social_id | category_id 
----------------------- 
34  | 3 
20  | 6 
80  | 3 

我想查看每個用戶在某個社會類別中出現的最舊推文。 我寫的以下SQL似乎不起作用。我每twitter_user一行但我沒有看到最早的鳴叫

SELECT tu.screen_name as Handle, tw.created_at as Earliest 
FROM twitter_users tu 
    LEFT JOIN tweets tw 
     ON tu.user_id = tw.user_id 
    LEFT JOIN twitter_social ts 
     ON ts.user_id = tu.user_id 
    LEFT JOIN social_categories cs 
     ON ts.social_id = cs.social_id 
WHERE cs.category_id=3 
GROUP BY Handle 
ORDER BY Earliest ASC 

編輯 我想如果你想最早有像下面

Handle | Earliest 
--------------------- 
david | 2014-03-24 
michael | 2013-08-12 
+1

嘗試'MIN(tw.created_at)作爲Earliest' –

+0

呀,這做到了@AbhikChakraborty謝謝。我認爲MIN在查詢中已經太晚了,但它起作用了! – user3564392

回答

2
SELECT tu.screen_name as Handle 
    ,MIN(tw.created_at) as Earliest 
FROM twitter_users tu 
LEFT JOIN tweets tw 
    ON tu.user_id = tw.user_id 
LEFT JOIN twitter_social ts 
    ON ts.user_id = tu.user_id 
LEFT JOIN social_categories cs 
    ON ts.social_id = cs.social_id 
WHERE cs.category_id=3 
GROUP BY tu.screen_name 
ORDER BY Earliest ASC 
1

結果,它不是ASC (升序)

ORDER BY Earliest ASC 

應當DESC(降序)

ORDER BY Earliest DESC 
+1

這應該是一個評論而不是答案。 –

+0

我的意思是最早的,而不是最近的。 – user3564392

0
SELECT tu.screen_name as Handle, tw.created_at as Earliest 
FROM twitter_users tu 
LEFT JOIN tweets tw 
    ON tu.user_id = tw.user_id 
LEFT JOIN twitter_social ts 
    ON ts.user_id = tu.user_id 
LEFT JOIN social_categories cs 
    ON ts.social_id = cs.social_id 
WHERE cs.category_id=3 
GROUP BY Handle 
ORDER BY Earliest DESC 
LIMIT 1 
0

試試這個

SELECT tu.screen_name as Handle, min(tw.created_at) as Earliest 
FROM twitter_users tu 
    LEFT JOIN tweets tw 
     ON tu.user_id = tw.user_id 
    LEFT JOIN twitter_social ts 
     ON ts.user_id = tu.user_id 
    LEFT JOIN social_categories cs 
     ON ts.social_id = cs.social_id 
WHERE cs.category_id=3 
GROUP BY tu.screen_name 
ORDER BY Earliest ASC