Mysql 今天放映';现在的排名和昨天的排名';s

Mysql 今天放映';现在的排名和昨天的排名';s,mysql,Mysql,我有一个带有ID、排名、图表日期和页面视图的表格。它基于每晚运行的cron作业,并编译该ID的页面浏览量 例如: ID | RANK | PAGEVIEWS | CHART_DATE 5 1 100 2012-10-14 9 2 75 2012-10-14 13 3 25 2012-10-14 9

我有一个带有ID、排名、图表日期和页面视图的表格。它基于每晚运行的cron作业,并编译该ID的页面浏览量

例如:

ID   |   RANK   |   PAGEVIEWS   |  CHART_DATE
5          1           100         2012-10-14
9          2           75          2012-10-14
13         3           25          2012-10-14
9          1           123         2012-10-13
5          2           74          2012-10-13
19         3           13          2012-10-13
所以我根据2012-10-14抓取今天的图表,并以1-3对数据进行排名。但我还想显示身份证在前一天的排名

例如,在2012年10月14日,ID 5排名第一,但在2012年10月13日,它排名第二

我可以用一个查询来完成吗?或者我必须根据今天的结果循环并对每个ID进行查询吗

我可以用一个查询来完成吗

可以,但需要在具有今天日期的表和具有昨天日期的表之间建立联接:

SELECT today.*, yesterday.rank
    FROM yourtable AS today
    JOIN yourtable AS yesterday
        ON (today.id = yesterday.id
            AND today.chart_date = date(now())
            AND yesterday.chart_date = date(date_sub(now(), interval 1 day))
        )
    ORDER BY today.rank DESC;
您甚至可以显示差异:

SELECT today.*, yesterday.rank AS yest, yesterday.rank-today.rank AS incr
    FROM yourtable AS today
    LEFT JOIN yourtable AS yesterday
        ON (today.id = yesterday.id
            AND today.chart_date = date(now())
            AND yesterday.chart_date = date(date_sub(now(), interval 1 day))
        )
    ORDER BY today.rank DESC;

ID   |   RANK   |   PAGEVIEWS   |  CHART_DATE  |  YEST  |  INCR
5          1           100         2012-10-14     2     |   1
9          2           75          2012-10-14     1     |  -1
13         3           25          2012-10-14     4     |   1

LEFT JOIN
确保今天的数据存在,即使昨天的数据不存在)。

未经测试,但类似的方法应该可以工作:

select today.id, today.rank, yesterday.rank 
from mytable as today
left join mytable as yesterday on today.id = yesterday.id 
where today.chart_date = 2012-10-14
order by pageviews desc limit 3

不清楚你需要什么,你能发布一个想要的结果样本吗?小心,这会让你得到比你期望的更多(你也会加入今天,今天和前天)。此外,最好是你报价日期;2012年10月14日可能是1988年,而不是“2012年10月14日”。