PHP mysql获取两个日期之间的减法

PHP mysql获取两个日期之间的减法,php,mysql,Php,Mysql,我有这样的表格结构: Id Name Rank Date ----------------------------------- 1 test 1000 2012-1-11 2 test 7000 2012-1-10 3 test2 2000 2012-1-11 4 test2 200 2012-1-10 5 test3 4000

我有这样的表格结构:

Id    Name      Rank      Date
-----------------------------------
1     test      1000      2012-1-11

2     test      7000      2012-1-10

3     test2     2000      2012-1-11

4     test2     200       2012-1-10

5     test3     4000      2012-1-10

6     test4     6500      2012-1-11
考虑到今天的日期是2012年1月11日 昨天的日期是2012年1月10日

在单个查询中,我得到了今天和昨天的每个用户名之间的差异。 i、 e测试昨天排名7000,今天排名1000。所以结果是6000 类似地,test2也有-1800

我需要输出为:

Name     Difference (Orderby the difference Desc)
--------------------
test      6000
test2     -1800
如果今天或昨天的记录不可用,我们将不计算该记录


这在PHP MySQL中可能吗?

实际上,您需要的所有内容都在这个页面上


你需要的一切都在这一页上

这个怎么样?(不太清楚你想达到什么目的……)请发表评论

代码:

根据OP的评论进行编辑:

请注意,我在示例表中添加了一些额外的记录,用于触发条件

代码2:

select b.id, b.name,b.rank AS New,
b.Date new_date,
a.Rank as Old, a.date as old_date, 
(b.rank-a.rank) diff
from t1 a
left join t1 b
on b.name = a.name
where b.date > a.date and b.date <= Now()
and datediff(b.date, a.date) = 1
having not diff is null and diff <> 0
order by diff desc
;
这个怎么样?(不太清楚你想达到什么目的……)请发表评论

代码:

根据OP的评论进行编辑:

请注意,我在示例表中添加了一些额外的记录,用于触发条件

代码2:

select b.id, b.name,b.rank AS New,
b.Date new_date,
a.Rank as Old, a.date as old_date, 
(b.rank-a.rank) diff
from t1 a
left join t1 b
on b.name = a.name
where b.date > a.date and b.date <= Now()
and datediff(b.date, a.date) = 1
having not diff is null and diff <> 0
order by diff desc
;

我试过这个。如果名称“test”有2条以上的记录,即“test”有6条不同日期的记录,那么它将为“test”生成3组结果。我只需要用今天的日期和昨天的日期来测试这个。因此,我将查询修改为select b.intProductId,b.intId,(b.intRank-a.intRank)diff from tbl_amazon_prorank a left join tbl_amazon_prorank b on b.dtDateselect b.id, b.name,b.rank AS New, b.Date new_date, a.Rank as Old, a.date as old_date, (b.rank-a.rank) diff from t1 a left join t1 b on b.name = a.name where b.date > a.date and b.date <= Now() and datediff(b.date, a.date) = 1 having not diff is null and diff <> 0 order by diff desc ;
ID  NAME    NEW     NEW_DATE            OLD     OLD_DATE            DIFF
3   test    8000    January, 12 2012    1000    January, 11 2012    7000
4   test2   2000    January, 11 2012    200     January, 10 2012    1800
1   test    1000    January, 11 2012    7000    January, 10 2012    -6000