2013-08-02 49 views
0

我想知道如何实现这样的查询。例如说我有以下表跟踪对链接的点击来自不同的IP地址来:MySQL组由一列取决于另一列的值

id  link  ip 
1  Link 1  100.100.1.1 
2  Link 1  100.100.1.2 
3  Link 2  100.100.1.3 
4  Link 1  100.100.1.1 
5  Link 3  100.100.1.4 
6  Link 3  100.100.1.1 

我想要做的就是让所有的独立IP点击相同的链接,这样的结果应该是这样的:

id  link  ip 
1  Link 1  100.100.1.1 
2  Link 1  100.100.1.2 
3  Link 2  100.100.1.3 
5  Link 3  100.100.1.4 
6  Link 3  100.100.1.1 

我想我应该组表,但这样做会删除链接或IP列的重复。是否有可能只是将所有链路1 IP,链路2,IP,链路3 IP等组合起来?

希望这听起来不太令人困惑。

回答

1

可以使用group by做到这一点:

select min(id) as id, link, ip 
from t 
group by link, ip; 

在MySQL中,你可以使用此语法:

select id, link, ip 
from t 
group by link, ip; 

其中idselect列表中,但不是在group by。尽管允许,但我认为这是一个普遍进入的坏习惯(有些情况下这个功能很有用)。

+0

谢谢你,这确实让我我需要什么。现在,我忘了在我的原始问题中包含后续内容。如果我有另一个INT列存储记录点击/行时的时间戳,我该如何将某个链接下的IP分组,如同1小时之间记录的那样?我想放弃在指定的时间内完成的重复的ip点击,但如果点击是在那之后做出的(例如一小时之后),则再次对它们进行计数。 – georaldc

+0

@georaldc。 。 。这是一个非常不同的问题。我建议你问这是另一个问题。 –

+0

有道理。在我开启一个新问题之前,我会努力让它工作。再次感谢! – georaldc

0

select distinct也将工作,如果你只是想查看列

无需组

相关问题