我有一张桌子记录了每天某些网页的累计访问次数。我想在特定日期为所有这些页面获取真实的访问号码。表就像
- 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 :(得分:1)
确定。您需要通过加入date
列并在联接的一侧添加一天来加入表格。
假设:
date
列是合法的DATE
类型,而不是字符串INT
(BIGINT
,INT
,SMALLINT
等等。)你可以这样做:
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