我有一堆行position
列,可以是integer
或NULL
。
行是按日期顺序排列的,我要做的是获取position
字段与前一天不同的行数。
我有以下内容:http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=c67fed3a0b65f875fec1cf7d1992b69b
这很有用,但问题是,position
可以是NULL
,以下内容不起作用:http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=f61b5407f178210bc50aadfd3427639c
有没有办法修改我的查询,所以它还会包含NULL
行?
由于
答案 0 :(得分:0)
如果您更改以下内容,您的第二个示例也会起作用:
SUM(当IFNULL(r1。position
,0)的情况!= IFNULL(r2。position
,0)那么1 ELSE 0 END)
http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=bd00e6ed47872d05f544842ade631f6a
答案 1 :(得分:0)
插入时将''
从null中删除,如下所示
INSERT INTO `rankings` (`id`, `position`, `date`, `ranking_id`) VALUES
('1', '22', '2015-05-14', '1'),
('2', '22', '2015-05-15', '1'),
('3', null , '2015-05-16', '1'),
('4', '22', '2015-05-17', '1');
尝试以下查询
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.`ranking_id` = r2.`ranking_id`
WHERE r1.position IS NOT NULL OR r2.position IS NOT NULL
GROUP BY r1.`date`
order by r1.`date` DESC
limit 1