SQL按时间顺序选择6行

时间:2013-10-21 17:18:36

标签: mysql select

我在想如何制作应该抓住我想要的信息的SQL。而我无法找到答案。我需要创建SQL,它可以在48小时内从我的表中获取6个下载最多的记录并按时间顺序排序。我的表看起来像

这就是我的表格的样子:http://puu.sh/4VL9z.png

所以查询应该在48小时内获取唯一的行(通过IP,不应该有相同的downloader_ip),然后通过下载只获取6个流行的行,并通过“modification_id”显示它。应该有6个不同的“modification_id”。

那么如何制作这样的SQL?

修改

我会想象如果我有行:

| id | modification_id | time | file_name | downloader_ip |

| 1 | 320 | 1382368921 | name.rar | 127.01.015.14|

| 2 | 322 | 1382368925 | name.rar | 127.02.015.14 |

| 3 | 325 | 1382368926 | name.rar | 127.03.015.14 |

| 4 | 326 | 1382368928 | name.rar | 127.04.015.14 |

| 5 | 328 | 1382368930 | name.rar | 127.05.015.14 |

| 6 | 330 | 1382368935 | name.rar | 127.06.015.14 |

所以如果表格看起来像这样,那么查询应该显示1-6行(按id)。

1 个答案:

答案 0 :(得分:0)

因此,您无法使用DISTINCT,因为这是一个后置过滤器。您必须使用GROUP BY代替,这会使您在列(或列组)上具有唯一性。将其与DATE_SUB(基于日期限制)和LIMIT(限制为6个条目)相结合,您应该很好!

SELECT *
FROM download_records
WHERE
    time >= DATE_SUB(time,INTERVAL 2 DAY)
GROUP BY modification_id
ORDER BY time DESC
LIMIT 0, 6