如何从mysql中选择字段的增量

时间:2012-09-28 13:32:30

标签: mysql sql

我有一张桌子记录了每天某些网页的累计访问次数。我想在特定日期为所有这些页面获取真实的访问号码。表就像

- 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函数得到我想要的东西吗?

3 个答案:

答案 0 :(得分:1)

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

假设:

  1. date列是合法的DATE类型,而不是字符串
  2. 每一页都占每一页(无间隙)
  3. addup_number是某种类型的INTBIGINTINTSMALLINT等等。)
  4. table_name替换为您未指明的实际表名
  5. 每个页面每天只有一条记录...即同一天没有多个页面有多个记录
  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子句中添加一天来对其进行转换,但你会得到你的数据。

答案 1 :(得分: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

答案 2 :(得分:0)

这样的事情:

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