计算不同的行数

时间:2017-08-31 15:18:40

标签: php mysql

我有一个数据库表,其中包含以下格式的多行:

id | date | position | change_id
1 | 2013-05-14 | 1 | 1
2 | 2013-05-14 | 2 | 2
3 | 2013-05-14 | 2 | 3

4 | 2013-05-15 | 2 | 1 <--- changed from prev day
5 | 2013-05-15 | 1 | 2 <--- changed from prev day
6 | 2013-05-15 | 2 | 3

7 | 2013-05-16 | 2 | 1 <--- not changed from prev day
8 | 2013-05-16 | 1 | 2 <--- not changed from prev day
9 | 2013-05-16 | 2 | 3 <--- not changed from prev day

我要做的是计算在两个日期之间position列中已经更改了多少行,即在示例中我想要获得{{1}的次数在position2013-05-16之间有所不同。该值为0,因为2013-05-15值未更改。

但如果我想使用日期position2013-05-15,则计数将为2,因为位置值已更改两次(如图所示)

这可以在一个查询中完成,还是需要进行某种处理服务器端?

由于

2 个答案:

答案 0 :(得分:0)

从x GROUP BY日期

选择日期,MAX(更改)

(或者可能是COUNT的变化 - 不确定你提出的问题是什么)

答案 1 :(得分:0)

<强> SQL DEMO

SELECT r1.`date`, 
      SUM(CASE WHEN r1.`position` != r2.`position` 
               THEN 1 
               ELSE 0 
          END) as daily_changes
FROM `rankings` r1
LEFT JOIN `rankings` r2
  ON r1.`date` = r2.`date` + 1
 AND r1.`change_id` = r2.`change_id`
GROUP BY r1.`date` 

<强>输出

enter image description here