SQL Server-将字符串转换为已用时间,返回最大值

SQL Server-将字符串转换为已用时间,返回最大值,sql,sql-server,duration,Sql,Sql Server,Duration,我有一组值,如: TrackUserId EventTime EventName EventValue --------------------------------------------------------------------- 643812 2019-10-05 00:26:38.513 time.today 00:40:55.9443418 643806 2019-10-04 23:51:43.577 t

我有一组值,如:

TrackUserId EventTime                 EventName     EventValue
---------------------------------------------------------------------
643812      2019-10-05 00:26:38.513   time.today    00:40:55.9443418
643806      2019-10-04 23:51:43.577   time.today    00:02:33.6620074
643806      2019-10-04 23:52:30.610   time.today    00:13:04.3645199
EventValue
是一个字符串(数据库是名称-值对,其中值“type”取决于名称)。这里的值是持续时间,而不是一天中的时间。 它可以在一天中多次写入特定
TrackUserId
的持续时间,每个值都是迄今为止的当天持续时间。因此,这些值不断增加

请注意,TrackUserId=643806有两个条目,在本例中,我需要第二个条目,因为它的持续时间较长


对于给定的
TrackUserId
EventTime
天(即按日期,而不是按日期时间),我希望返回一行,即经过时间最长的行。这可能吗?

您似乎想要聚合:

select TrackUserId, EventTime, max(EventValue)
from t
where EventName = 'time.today'
group by TrackUserId, EventTime;
对于数据示例,这是不必要的,因为所有事件时间都不同,所以您只需要这三行

如果您希望每个
TrackUserId
获得最近的行,则可以使用相关子查询:

select t.*
from t
where t.EventName = 'time.today' and
      t.EventTime = (select max(t2.EventTime)
                     from t t2
                     where t2.TrackUserId = t.TrackUserId and
                           t2.EventName = 'time.today'
                    );
您可以将其调整一天:

select t.*
from t
where t.EventName = 'time.today' and
      t.EventTime = (select max(t2.EventTime)
                     from t t2
                     where t2.TrackUserId = t.TrackUserId and
                           convert(date, t2.eventTime) = convert(date, t1.eventTime) and
                           t2.EventName = 'time.today'
                    );

所有行的
EventTime
值都不同,因此此示例中的条件将导致您指定的三行。您的示例数据与描述不匹配。@ZoharPeled它如何不匹配?EventName和EventValue列都是varchar。您写入的值是递增的,但在示例数据中是递减的。@ZoharPeled抱歉,已修复(我写入了伪数据)。TrackUserId=643806有两个条目,所以我只需要第二个条目。我尝试了你的选择,但它返回了所有三个。Gordon的回答给出了你描述的确切结果-每个TrackUserId和EventTime一行。如果这不是你想要的,你可能应该再次编辑你的问题。