我的表格中包含id
,mail
,hits
,time
等列。
我希望获得最低hits
和time
值(最佳条目)的10个条目。
我使用过这样的东西:
SELECT *
FROM tablename
ORDER BY hits, time ASC
在我的表中,有许多条目具有相同的mail
地址,但我只想要10个具有不同邮件地址的条目。所以我尝试了group by
语句,之后数据被混淆了。
如何选择具有不同hits
地址的10个最佳条目(最低time
和mail
)?
答案 0 :(得分: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 :=@rownum+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 :(得分:0)
谢谢你们,但你的解决方案对我不起作用。但是你引导我朝着正确的方向前进:)
我发现了一些有用的东西
SELECT *
FROM (
SELECT *
FROM tablename
ORDER BY hits ASC, time ASC
) AS sub
GROUP BY mail