Sql 如何根据应用于不同列的条件查找行差异
我有一个包含名称、日期和标志的数据集,它是正的、负的或中性的。数据集按名称排序,然后按日期排序。我必须找到负面和正面标志的日期之间的差异,严格按照顺序,以及每个人第一次出现这种情况。例如,如果数据集看起来像Sql 如何根据应用于不同列的条件查找行差异,sql,Sql,我有一个包含名称、日期和标志的数据集,它是正的、负的或中性的。数据集按名称排序,然后按日期排序。我必须找到负面和正面标志的日期之间的差异,严格按照顺序,以及每个人第一次出现这种情况。例如,如果数据集看起来像 Aaron 5th Feb. + Aaron. 7th Feb. - Aaron. 10th Feb. - Aaron. 11th Feb. + Aaron. 15th. Feb. - Aaron. 2
Aaron 5th Feb. +
Aaron. 7th Feb. -
Aaron. 10th Feb. -
Aaron. 11th Feb. +
Aaron. 15th. Feb. -
Aaron. 20th Feb. +
在这里,答案应该是1天(介于10日和11日之间)。因此,查询应该返回
Aaron. 1
Dave. 2
.... And so on
我通过MySQL函数实现了这一点:
mysql> select dummy() \G
dummy(): For aron the dates are 2019-02-10 00:00:00 & 2019-02-11 00:00:00 and
the difference is 1,
For dave the dates are 2019-02-08 00:00:00 & 2019-02-10 00:00:00 and the
difference is 2,
For rambo the date are 2019-01-06 00:00:00 & 2019-01-08 00:00:00 and the
difference is 2,
以下是示例表:
select * from tets;
+-------+---------------------+------+
| name | date | flag |
+-------+---------------------+------+
| aron | 2019-02-05 00:00:00 | + |
| aron | 2019-02-07 00:00:00 | - |
| aron | 2019-02-10 00:00:00 | - |
| aron | 2019-02-11 00:00:00 | + |
| aron | 2019-02-15 00:00:00 | - |
| aron | 2019-02-20 00:00:00 | + |
| dave | 2019-02-04 00:00:00 | + |
| dave | 2019-02-06 00:00:00 | - |
| dave | 2019-02-08 00:00:00 | - |
| dave | 2019-02-10 00:00:00 | + |
| dave | 2019-02-11 00:00:00 | - |
| dave | 2019-02-12 00:00:00 | + |
| rambo | 2019-01-06 00:00:00 | - |
| rambo | 2019-01-08 00:00:00 | + |
+-------+---------------------+------+
如果我正确地理解了这个请求,对于上面的每个名字,当第一次从“-+”改为“+”时,要找到日期之间的差异[我们需要严格地考虑“--”到“+”,而不是另一种方式“< /P>”。 因此,下面这样的函数应该给出结果:(请原谅变量的随机名称:)
mysql还是sql server?请删除不必要的标记。示例数据集中没有Dave。请根据您的实际样本提供所需的结果。我删除了不兼容的数据库标记。请仅使用您真正使用的数据库进行标记。
mysql> select dummy() \G
dummy(): For aron the dates are 2019-02-10 00:00:00 & 2019-02-11 00:00:00 and
the difference is 1,
For dave the dates are 2019-02-08 00:00:00 & 2019-02-10 00:00:00 and the
difference is 2,
For rambo the date are 2019-01-06 00:00:00 & 2019-01-08 00:00:00 and the
difference is 2,