Sql 获取与最大日期关联的字符串值
我已经有一个查询,它使用GROUPBY来获取其他值。对于第二个和最后一个时间戳(可能是同一个东西),我需要获取相关的文本值 所以我想要的是(混合使用SQL和英语): 一些数据:Sql 获取与最大日期关联的字符串值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我已经有一个查询,它使用GROUPBY来获取其他值。对于第二个和最后一个时间戳(可能是同一个东西),我需要获取相关的文本值 所以我想要的是(混合使用SQL和英语): 一些数据: InitialTime EventType EventTime 6/9/2014 3:00:14 VoiceMail 6/9/2014 3:01:22 6/9?2014 3:00:14 Disconnect 6/9/2014
InitialTime EventType EventTime
6/9/2014 3:00:14 VoiceMail 6/9/2014 3:01:22
6/9?2014 3:00:14 Disconnect 6/9/2014 3:02:13
6/9/2014 3:00:14 Success 6/9/2014 3:05:15
6/9/2014 3:15:15 Voicemail 6/9/2014 3:16:02
6/9/2014 3:15:15 Hangup 6/9/2014 3:17:03
6/9/2014 3:15:15 Fail 6/9/2014 3:19:00
我上面的问题应该得到解决
6/9/2014 3:00:14 Disconnect Success
6/9/2014 3:15:15 Hangup Fail
那么,如果我已经有了一个分组,那么最好的方法是什么?无法对分组依据使用分区查询。实际上,实际查询在更多字段上分组,并返回更多结果。保持问题的简单性。您想使用
row\u number()
以及条件聚合来解决这个问题:
select InitialTime,
max(case when seqnum_forward = 1 then EventType end),
max(case when seqnum_backward = 1 then EventType end)
from (select t.*,
row_number() over (partition by InitialTime order by EventTime desc) as seqnum_backward,
row_number() over (partition by InitialTime order by EventTime asc) as seqnum_forward
from table t
) t
group by InitialTime;
看起来rank()可能会起作用。感谢您的快速响应。实际上,“seqnum=1”将给出一个错误,删除它似乎也可以。只是为了正确地回答这个问题,选择中的seqnum_forward=2。再次感谢。
where
子句是错误的;这是查询的早期版本,我没有删除它。
select InitialTime,
max(case when seqnum_forward = 1 then EventType end),
max(case when seqnum_backward = 1 then EventType end)
from (select t.*,
row_number() over (partition by InitialTime order by EventTime desc) as seqnum_backward,
row_number() over (partition by InitialTime order by EventTime asc) as seqnum_forward
from table t
) t
group by InitialTime;