我有一个数据库表,其中包含以下格式的多行:
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}的次数在position
和2013-05-16
之间有所不同。该值为0,因为2013-05-15
值未更改。
但如果我想使用日期position
和2013-05-15
,则计数将为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`
<强>输出强>