2014-11-23 53 views
2

返回专栏中,我有喜欢idmailhitstime列的表。集团通过柱y和与最低值的列X

我想获得最低hitstime值(最佳条目)的10个条目。

我以前是这样的:

SELECT * 
FROM tablename 
ORDER BY hits, time ASC 

在我的桌子,有许多项具有相同mail地址,但我只想要10项不同的邮件地址。所以我尝试了group by声明,之后数据混淆了。

如何选择10个最佳条目(最低的hitstime)与不同的mail地址?

+0

? – Jaylen 2014-11-23 19:27:57

回答

1

此查询我还没有测试过,因为没有SQL-Fiddle示例或代码来复制您的数据。

但试试这个疯狂的查询。

SET @prevMail = '', @rownum=0; 
SELECT b.mail, b.time, b.hits 
FROM (
    SELECT 
    a.mail, 
    a.time, 
    a.hits, 
    CASE WHEN @prevMail = a.mail THEN @rownum :[email protected]+1 ELSE @rownum :=1 END AS rowNum, 
    @prevMail:=a.mail 
    FROM (
     SELECT mail, time, SUM(hits) AS hits 
     FROM tablename 
     GROUP BY mail, time 
     ORDER BY mail, time, SUM(hits) ASC 
    ) AS a 
) AS b 
WHERE b.rowNum <= 10; 

下面是该查询的解释:

  1. 计算总点击每个组合(邮件和时间),然后通过这个命令的邮件,时间和总点击订单他们。
  2. 从第一步返回的列表中,我们检查查询的每一行,如果该行中的电子邮件与前一行相同,那么它将增加行号,否则将其设置为1,表示在那里是一个新的组合开始。
  3. 最后的查询将只给你每个组合的前10条记录。
0

感谢球员,但你的解决方案并不适合我。但你指导我在正确的方向:)

我发现东西,你可以创建一个拨弄你的表,请即工作

SELECT * 
FROM (
    SELECT * 
    FROM tablename 
    ORDER BY hits ASC, time ASC 
) AS sub 
GROUP BY mail