我正在使用PHP和MySQL,并且具有以下表结构:
date | name | value
2012-11-20 10:30:03 visits 503
2012-10-23 09:30:03 pageviews 567
2012-09-23 09:30:03 pageviews 345
2012-10-20 11:30:03 visits 874
我需要运行一个 MySQL 查询来比较每个名称/值对的两个最新记录,并返回名称/值对的值是否下降或上升。
例如,使用上面的示例数据,查询将返回网页浏览量上升而访问量下降。
如果您想完全在 MySQL
中进行比较,您可以通过 2 个步骤完成。
请参阅此处的 SQLFiddle - http://sqlfiddle.com/#!2/80677/9/0 注意 - SQLFIDDLE 不允许CREATE TEMPORARY TABLE
,所以我不得不将其修改为CREATE TABLE
首先,您需要创建一个临时表,该表将仅包含每个name
组的最后 2 行-
CREATE TEMPORARY TABLE tmptable
SELECT * FROM
(SELECT IF(@prev != sq.name, @rownum:=1, @rownum:=@rownum + 1) AS rownumber, @prev:=sq.name, sq.* FROM
(SELECT * FROM table_name , (SELECT @rownum:=0, @prev:=0) r ORDER BY name, date DESC ) sq
) q WHERE q.rownumber <=2;
然后,您将比较这 2 行中的每一行,以确定它是上升还是下降-
SELECT a.name,
IF(a.value > b.value, 'up', 'down') action
FROM tmptable a
JOIN tmptable b
ON a.name = b.name AND a.date > b.date ORDER BY a.date DESC;
如果您的表结构与您发布的相同 - (date,name,value)
- 那么您唯一需要做的更改是它在CREATE TEMPORARY TABLE
查询中显示table_name
的位置。
在 PHP 中,你可以回显 -
while($row = ...fetch_array($query)){
echo $row['name'] ." -> ".$row['action']."<br />";
}