2010-03-14 69 views
2

我有一个名为event的事件表。为了这个问题的目的,它只有一个字段date如何通过SUM限制结果

下面的查询返回了我一个数字,在每个日期发生了未来14天内的事件:

SELECT 
    DATE_FORMAT(ev.date, '%Y-%m-%d') as short_date, 
    count(*) as date_count 
FROM event ev 
WHERE ev.date >= NOW() 
GROUP BY short_date 
ORDER BY ev.start_date ASC 
LIMIT 14 

结果可能如下:

+------------+------------+ 
| short_date | date_count | 
+------------+------------+ 
| 2010-03-14 |   1 | 
| 2010-03-15 |   2 | 
| 2010-03-16 |   9 | 
| 2010-03-17 |   8 | 
| 2010-03-18 |   11 | 
| 2010-03-19 |   14 | 
| 2010-03-20 |   13 | 
| 2010-03-21 |   7 | 
| 2010-03-22 |   2 | 
| 2010-03-23 |   3 | 
| 2010-03-24 |   3 | 
| 2010-03-25 |   6 | 
| 2010-03-26 |   23 | 
| 2010-03-27 |   14 | 
+------------+------------+ 
14 rows in set (0.06 sec) 

比方说,我想以日期来展示这些事件。同时我只想一次显示最多10个。我将如何做到这一点?

不知怎的,我需要通过date_count字段的SUM来限制这个结果,但我不知道如何。

有人遇到过这个问题吗?

任何帮助,将不胜感激。谢谢

被修改: 我在原来的帖子中忘记了额外的要求(关键的一个,哎呀)是我只想整天。 即。由于限制为10,它只会返回以下行:

+------------+------------+ 
| short_date | date_count | 
+------------+------------+ 
| 2010-03-14 |   1 | 
| 2010-03-15 |   2 | 
| 2010-03-16 |   9 | 
+------------+------------+ 
+1

我觉得您的查询不会做你期待什么如果有一天没有任何事件。 – 2010-03-14 11:02:02

+0

如果在某个特定日期没有发生任何事件,那么该日期行将不会出现,这对我的目的是可以的 – denormalizer 2010-03-14 11:10:30

+0

你是说,当你开始在14日添加date_count时,你将在16日停止,因为1+ 2 + 9> = 10 – lexu 2010-03-14 12:32:08

回答

1

我觉得用LIMIT 0, 10会为你工作。

+0

这太容易了! :)这让我重新阅读我的问题,并意识到我忽略了一个关键方面。对不起,Jacob和lexu让我修改这个问题。 – denormalizer 2010-03-14 12:14:01

3
  1. 使用日期函数来限制日期的14天范围
  2. 使用限制,以显示前10

SELECT 
    DATE_FORMAT(ev.date, '%Y-%m-%d') as short_date, 
    count(*) as date_count 
FROM event ev 
WHERE ev.date between NOW() and date_add(now(), interval 14 day) 
GROUP BY date(short_date) 
ORDER BY ev.start_date ASC 
LIMIT 0,10 
+0

这太容易了! :)这让我重新阅读我的问题,并意识到我忽略了一个关键方面。对不起,雅各和勒绪让我赞扬这个问题。 – denormalizer 2010-03-14 12:14:34