-3

我在想如何制作应该获取我想要的信息的 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)。

4

1 回答 1

0

所以,你不能使用 aDISTINCT因为那是一个后过滤器。您必须GROUP BY改用它,这使您在一列(或一组列)上具有唯一性。将它与 a DATE_SUB(根据日期限制)和 a 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
于 2013-10-21T17:30:55.607 回答