Mysql 具有空值的行中的差异

Mysql 具有空值的行中的差异,mysql,Mysql,我有一堆行,它们有一个位置列,可以是整数或空 这些行在日期上是连续的,我想做的是得到位置字段与前一天不同的行数 我有如下几点: 这很有效,但问题是,位置可能是空的,以下情况不起作用: 有没有办法修改我的查询,使其也包括NULL的行 谢谢如果您更改以下内容,您的第二个示例也会起作用: 在Create Table中,通过删除“not null”使位置列“nullable” 插入时删除“NULL”中的引号 将总数更改如下 求和(当IFNULL(r1.位置,0)!=IFNULL(r2.位置,0)时,

我有一堆行,它们有一个
位置
列,可以是
整数

这些行在日期上是连续的,我想做的是得到
位置
字段与前一天不同的行数

我有如下几点:

这很有效,但问题是,
位置
可能是
空的
,以下情况不起作用:

有没有办法修改我的查询,使其也包括
NULL
的行


谢谢

如果您更改以下内容,您的第二个示例也会起作用:

  • 在Create Table中,通过删除“not null”使位置列“nullable”
  • 插入时删除“NULL”中的引号
  • 将总数更改如下
求和(当IFNULL(r1.
位置
,0)!=IFNULL(r2.
位置
,0)时,则为1,否则为0结束)

插入时从空中删除
'
,如下所示

    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

请编辑您的帖子,以包括示例输入数据、现有查询、预期结果集以及格式良好的文本。这将使文章更具可读性,你将有更好的机会得到正确的答案。@sipher_z你的查询不会达到你的预期。您似乎假设
1!=null
为真。事实上,
1!=null
null
,将在总和中计为零。这里有一把小提琴来说明任何涉及
null
s的比较都是错误的:嗨,谢谢你。我用正确的列和数据更新了示例。在您的示例中,它返回
0
行。由于
2015-05-16
NULL
2015-05-17
22
,因此我希望查询的输出为
1
,因为值不同。.我更新了答案,并使其工作。当一个值为空时,r1和r2位置的比较为空。我需要包括空值,因为它们不同于整数。因此,在上面的示例中,id为3的行与id为4的行不同,因此结果将为4