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,