Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取与最大日期关联的字符串值_Sql_Sql Server_Tsql - Fatal编程技术网

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

我已经有一个查询,它使用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 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;