2012-09-28 22 views
0

我有一张表格,记录了一些网页每天的累计访问数量。我想在所有这些页面的特定日期中获取真正的访问号码。该表就像如何从mysql中选择字段的增量

- record_id page_id  date  addup_number 
- 1    1  2012-9-20  2110 
- 2    2  2012-9-20  1160 
- ...   ...   ...   ... 
- n    1  2012-9-21  2543 
- n+1   2  2012-9-21  1784 

我想获取结果是这样的:

- page_id  date  increment_num(the real visit numbers on this date) 
- 1   2012-9-21  X 
- 2   2012-9-21  X 
- ...   ...   ... 
- N   2012-9-21  X 

,但我不想这样做在PHP中,因为它是费时。我可以通过SQL指令或使用一些mysql函数来获得我想要的吗?

+0

差强人意的问题。考虑澄清你真的试图用更多的插图询问 – amphibient

回答

1

确定。您需要通过加入date列并在连接的一侧添加一天来加入表格。

假设:

  1. date列是一个合法的DATE类型而不是字符串
  2. 每天
  3. 更是占到了每一页(无缺口)
  4. addup_number是某种类型的INTBIGINTINT,SMALLINT等)
  5. table_name替换了您的实际表名,您不指示
  6. 每天只有一个记录的每一页...即没有页面具有在同一天多次计数

你可以这样做:

SELECT t2.page_id, t2.date, t2.addup_number - t1.addup_number AS increment_num 
    FROM table_name t1 
    JOIN table_name t2 ON t1.date + INTERVAL 1 DAY = t2.date 
    WHERE t1.page_id = t2.page_id 

有一点要注意的是,如果这是一个巨大的表格和date是一个索引列,您将在加入时受到影响,必须通过在ON子句中添加一天来对其进行转换,但是会得到您的数据。

+0

可能是我应该怪我自己的英语不好?为什么你们总是告诉我总结addup_number? HAA ...,我在上面解释过,请原谅我在这里复制和粘贴:。我想要增加数字,例如我在2012-9-21有2100次访问,2012-9-22有2600次,我想要返回2600-2100 = 500,我想为每一页(1-N,约100页或更多) – zoujyjs

+0

@zoujyjs啊,更具挑战性 – Ray

+0

@zoujyjs看到上面的答案,它应该得到你想要的东西 – Ray

0

更新:

SELECT today.page_id, today.date, (today.addup_number - yesterday.addup_number) as increment 
FROM myvisits_table today, myvisits_table yesterday 
WHERE today.page_id = yesterday.page_id 
    AND today.date='2012-9-21' 
    AND yesterday.date='2012-9-20' 
GROUP BY today.page_id, today.date, yesterday.page_id, yesterday.date 
ORDER BY page_id 
+0

我不是每天都在浏览最热门的网页,你误解了我的问题......我想要增加的数字,例如我在2012-9-21和2600有2100次访问在2012年9月22日,我想2600-2100 = 500返回,并且我希望为每个页面(1-N,大约100页或更多) – zoujyjs

+0

@zoujyjs我更新了我的答案,现在我明白了你的需要。我无法保证它没有错误(我现在没有SQL shell),但它可能会告诉你正确的方向。 – mbarthelemy

+0

很多,明天我会试试这个〜会回家〜我会告诉你结果! – zoujyjs

0

事情是这样的:

SELECT date, SUM(addup_number) 
FROM your_table 
GROUP BY date 
+0

你错过了我的问题,我想要增加的数字,例如我在2012-9-21有2100次访问,2012-9-22有2600次,我想2600-2100 = 500返回,每页(1-N ,约100页或更多)。你在不同的日子返回所有页面的总数 – zoujyjs