2016-08-30 54 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的那些记录。