首页 > 解决方案 > 如何在同一表组的不同行组之间按 1 值计算

问题描述

我有表:

Days      Date       numberfield
1    2020-04-09        5500055
2    2020-04-30        5500055
3    2020-04-11        5500055
55   2020-04-12        5500055
56   2020-04-13        5500055

我需要导出在特定日期相差大于 2 天的数字字段。给我所有在 4 月 11 日和 12 日两天以上有差异的数字字段。2020 年。

我已经从这里尝试了几种帮助,但对我不起作用。感谢您的意见...</p>

有一个查询我尝试过,并且可以工作,但没有优化。

select a.date, b.date, a.numberfield, b.numberfield, b.days-a.days as difference from
(select numberfield, days, date from #tmp where date = '2020-04-11' ) a,
(select numberfield, days, date from #tmp where date = '2020-04-12' ) b
where a.numberfield = b.numberfield
order by 3

结果是:

date         date    numberfield    numberfield difference
2020-04-11   2020-04-12  5500055        5500055      1
2020-04-11   2020-04-12  5500065        5500065      1
2020-04-11   2020-04-12  5500075        5500075      1
2020-04-11   2020-04-12  5500085        5500085      1
2020-04-11   2020-04-12  5500095        5500095      562

让我解释一下,至少尝试解释一下:) 我想获得连续两天之间差异大于 1、>=2 的数字字段。

像这个 5500095 例子。所以只给我有差异> 1的数字字段

标签: sqldategroup-by

解决方案


只需:join_where

select a.date, b.date, a.numberfield, b.numberfield,
       (b.days - a.days) as difference
from #tmp a join
     #tmp b
     on a.numberfield = b.numberfield
where a.date = '2020-04-11' and b.date = '2020-04-12' and
      abs(b.days - a.days) > 1
order by 3;

不需要子查询。. . 它们也不是特别有用。


推荐阅读