【发布时间】:2020-04-20 08:20:39
【问题描述】:
所以有点复杂。
我们在 ERP 系统中有一份“报告”。这就像来自几个表的大查询......但是,我猜它并不那么重要。我们有一千行。
这只是一个例子:
如何搜索“下一个传单号码”?因此,如果项目在传单 2015C 和 2016C 中,我想获得“扩展传单”。
这里的逻辑是:如果该项目在实际传单中 +1 = 那是一个“扩展传单”。
2015C: 20 实际年份,15 是传单编号。 C 是传单的类型。
日期是从 2008 年到今天。所以我不能只计算价值(有很多项目有很多传单)。
也许是LAG/LEAD ?
现在我正在使用这个查询,但它不准确(自联接):
decode(null,
(select count(*)
from --my_actual_table g
where g.id = id
and g.place_of_delivery = place_of_delivery
and g.partner = partner
and g.date <= date and g.date >= date-22
group by g.id, g.place_of_delivery, g.partner
having count(*) > 1 ),
null,'Extended flyer')
有没有更好的方法来做到这一点?
【问题讨论】:
-
代替图片,提供实际数据作为示例数据的创建和插入语句。并清楚地显示所需的输出。
-
2015C:历史教训告诉我们智能钥匙是愚蠢的。 -
@APC 太真实了
-
@APC 我不确定,但我认为
2015C不是主键(在我们的系统中不是)。这就像一个车牌号码。传单以 XML 格式从另一个系统导出。我们的密钥看起来像这样036200002049(另一列,此处未列出)。我只是想知道,sbstr(flyer,3,2)和lag/lead是否不可能提取 +1 -> 16。傻,但我没有别的想法。 -
@Know-nothing 。 . .您表中的某些内容是否代表“项目”?我也对“下一个传单号码”的意思有点迷茫?那是通过某种递增吗?还是基于时间?还是基于别的东西?
标签: sql oracle oracle11g aggregate erp