我想从基于两列的表中检索一些数据,请参见下面的表结构
更新 我想要基于两个条件的输出数据 1.如果代码值具有“ Web”或“ Offline”。 2.备注列中的数据与Pre_memo列中的数据相同。
输出应如下所示
到目前为止,我通过使用同一张表两次来获得输出,但是我想通过只使用一次表来获得输出结果,以避免与性能相关的问题,因为该表包含大量数据。
select distinct OrderTable.Memo,
max(OrderTable.Memo_Date) as Date1,
max(ot.Pre_Memo_Date) as Date2
from OrderTable,
OrderTable ot
where OrderTable.code in ('Web')
and ot.code in ('Offline')
and OrderTable.Memo = ot.Pre_Memo
group by OrderTable.Memo
有人可以帮忙吗?在基于备忘录和pre_memo列的查询和过滤器中仅使用一次OrderTable,因为它具有相同的数据?
答案 0 :(得分:0)
您可以使用union all
并进行有条件的聚合:
select Memo, max(case when code = 'Offline' then Date end) as Memo_date,
max(case when code = 'Web' then Date end) as Per_Memo_date
from (select Date, 'Web' as code, Pre_memo as Memo
from OrderTable o
where code = 'Web'
union all
select Date, 'Offline', Memo
from OrderTable o
where code = 'Offline'
) t
group by Memo;
答案 1 :(得分:0)
“我想从基于两列的表中检索一些数据,请参见下面的表结构”
提供样本足以说明问题(并希望在SO上做到),但这还不够,因此不能替代定义问题,您做不到。
如果没有问题的定义,我们只能猜测您要实现的目标。例如
如果一切正确,那么这说明了为什么在SQL中至少要有两个引用而在不可能的情况。您无法避免进行某种匹配,并且按定义进行匹配需要匹配两个不同的事物(即使两个不同的事物是一个事物和同一事物的不同子集)。实际上,在一个表中同时包含这两个截然不同的东西几乎是绝对的设计错误,这可能完全出于误导,即“将所有内容都放在一个表中使事情变得更容易”。
“到目前为止,我通过使用同一张表两次获得了输出,但是我想仅通过使用该表一次来获得输出结果,以避免与性能相关的问题,因为该表包含大量数据”
从您提出问题的方式来看,我怀疑您是在寻找某种手段来利用这些“脱机”元组是“ Web”元组之后的“下一个”事实,并且您可以编写SQL这样,引擎便可以派生出一种“单次通过”算法(您可能假设会更快)。
它不能那样工作。 SQL表没有固有的顺序,因此,在表中根本就没有“下一个”之类的东西。