我有一个像这样的表,其中包含三列From
,To
和Symbol
:
From To Symbol 0 2 dog 2 5 dog 5 9 cat 9 15 cat 15 20 dog 20 40 dog 40 45 dog
我试图编写一个SQL查询,以一种产生以下结果的方式对记录进行分组:
From To Symbol 0 5 dog 5 15 cat 15 45 dog
也就是说,如果From
和To
的值对于相同的Symbol
是连续的,则会创建一条结果记录,该结果记录的最小From
和最大的{{1 }}值和To
。在上面的示例表中,由于第二条记录在Symbol
列中的值为2,与下一条具有相同To
的记录中的From
值不同(15 ,20(狗),则为同一Symbol
(狗)创建两个结果记录。
我尝试将表加入自身,然后分组。但是我不知道该怎么做。我必须在 Microsoft Access 中执行此操作。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
假设这些值没有重叠,并且间隙用不同的值分开,则可以在MS Access中使用技巧。您需要标识相同的相邻符号。好的,您可以通过使用不同的符号(使用子查询)对前几行进行计数来识别它们。获得这些信息后,剩下的就是聚合:
select symbol, min(from) as from, max(to) as to
from (select t.*,
(select count(*)
from t as t2
where t2.from < t.from and t2.symbol <> t.symbol
) as grp
from t
) t
group by symbol, grp;
间隙会使该问题在MS Access中更加困难。
注意:列名不要使用保留字或关键字。这段代码使用了问题中提供的名称,但没有麻烦将它们转义。我认为这只会增加查询的难度。