0

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

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

4

3 回答 3

1

行。您需要通过加入date列并在联接的一侧添加一天来加入表本身。

假设:

  1. date列是合法DATE类型而不是字符串
  2. 每一天都占到每一页(没有间隙)
  3. addup_number 是INT某种类型的 ( BIGINT, INT, SMALLINT, 等...)
  4. table_name 替换您未指明的实际表名
  5. 每页每天只有一条记录...即没有页面在同一天有多次计数

你可以这样做:

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,但您将获得您的数据。

于 2012-09-28T13:39:12.507 回答
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
于 2012-09-28T13:36:58.783 回答
0

像这样的东西:

SELECT date, SUM(addup_number) 
FROM your_table 
GROUP BY date
于 2012-09-28T13:38:35.537 回答