2016-08-30 98 views
0

我試圖返回不同域的最大human_hits,但已經撞牆了。我已經用human_hits拉回了不同的域名,但它只是抓住了第一個域名,所以它不是最大的。在JOIN語句中使用MAX

我嘗試將MAX添加到語句並進行實驗,但只能設法掛起數據庫。

這裏是我迄今爲止...

SELECT q.* FROM ( 
    SELECT ah.datestamp, ad.domain, ah.human_hits 
    FROM `a_hits_hourly` ah 
    INNER JOIN a_saved_domains ad ON ah.domain_id = ad.domain_id 
    WHERE ah.datestamp > 2016070000 AND ah.human_hits > 0 
) q 
GROUP BY q.domain 

有人能幫忙嗎?

感謝

史蒂夫

+0

什麼是'human_visits'?那應該是'人類點子'? – Barmar

+0

我無法弄清楚你想要做什麼。你可以添加一些樣本數據和期望的結果嗎? – Barmar

回答

1

這個怎麼樣?

SELECT ad.domain, MAX(ah.human_hits) 
    FROM `a_hits_hourly` ah 
    INNER JOIN a_saved_domains ad 
    ON ah.domain_id = ad.domain_id 
    WHERE ah.datestamp > 2016070000 AND ah.human_hits > 0 
    GROUP BY ad.domain 

它應該讓你對每個domain最大human_hits。或者我不確定你想要什麼。

+0

謝謝馬特!似乎我再次過於複雜:) – SteveF

+0

如果我每次都這樣做,我會很高興:)很高興我能幫上忙。 –

0

如果您需要了解其他值,如datestamp,對應於你感興趣的記錄,你可以使用這樣的查詢:

SELECT domain, datestamp, human_hits 
FROM ( 
    SELECT  ah.datestamp, 
       ah.human_hits, 
       @rn := if (ad.domain = @domain, @rn + 1, 1) rn, 
       @domain := ad.domain domain 
    FROM  a_hits_hourly ah 
    INNER JOIN a_saved_domains ad ON ah.domain_id = ad.domain_id 
    WHERE  ah.datestamp > 2016070000 
    ORDER BY ad.domain, 
       ah.human_hits DESC 
) q 
WHERE rn = 1 

內部查詢降序排序命中每個域添加一個行計數,它在下一個域的開始時重置。外部查詢僅採用編號爲1的那些記錄。