我有一个结构如下的表:
create table roster
(
date date not null,
first nvarchar(20) not null,
second nvarchar(20) not null,
third nvarchar(20) not null,
fourth nvarchar(20) not null,
)
go
其中插入了以下数据:
insert into roster values ('2015-06-10 12:45:34', 'e', 'm', 'a', 'r')
insert into roster values ('2015-06-11 12:45:34', 'e', 'v', 'a', 'r')
insert into roster values ('2015-06-12 12:45:34', 'e', 'm', 'a', 'd')
insert into roster values ('2015-06-13 12:45:34', 'e', 'm', 'a', 'd') *
insert into roster values ('2015-06-14 12:45:34', 'e', 'm', 'a', 'r')
insert into roster values ('2015-06-15 12:45:34', 'e', 'm', 'a', 'r') *
insert into roster values ('2015-06-16 12:45:34', 'z', 'm', 't', 'r')
注:* 表示重复。
如何只选择“第一”、“第二”、“第三”和“第四”的一个唯一连续组合?例如,使用上面插入的数据,所需的输出为:
Date First Second Third Fourth
2015-06-10 12:45:34, e m a r
2015-06-11 12:45:34, e v a r
2015-06-12 12:45:34, e m a d
2015-06-14 12:45:34, e m a r
2015-06-16 12:45:34, z m t r
我正在寻找一个解决方案,保留条目时,他们不再连续(或当序列被打破),但删除重复的连续条目。
我已经看到类似的问题张贴在这里,但我一直无法作出一个解决方案,使用一组由。
任何帮助都将不胜感激
3条答案
按热度按时间lb3vh1jj1#
如果您只需要一个
exists()
,为什么还需要group by
呢?SQL小提琴
SQL小提琴
wh6knrhe2#
您可以按第一个、第二个、第三个、第四个值进行分组,然后选择遇到这些值的第一个日期(min(date))或最后一次出现的日期(max(date))
遇到的最后日期示例:小提琴
EDIT:编辑之前的质询,以包括开始和结束日期
额外:一些我在玩的时候等待你的答复:包括数值出现在1个字段中的日期列表:
编辑:我已经很接近你想要的了,但还不完全,但是我不知道如何让它更接近,我想这是我所能走的,剩下的就看别人了:D:SQLFIDDLE语言
rhfm7lfc3#
我一直在寻找自己的方法来实现这一点,并发现您也可以使用窗口函数来实现这一点: