Tsql 使用SQL按时差条件连接

Tsql 使用SQL按时差条件连接,tsql,sql-server-2012,Tsql,Sql Server 2012,假设我有一张这样的桌子: unitID unitName unitGroupName unitDate unitStartTime unitEndTime -------------------------------------------------------------------------- 1 unitA groupA 1/1/2019 9:00pm 11:00pm 1 unitA groupB

假设我有一张这样的桌子:

unitID  unitName unitGroupName  unitDate   unitStartTime   unitEndTime
--------------------------------------------------------------------------
1       unitA    groupA         1/1/2019   9:00pm          11:00pm
1       unitA    groupB         1/1/2019   11:10pm         11:45pm
1       unitA    groupC         1/1/2019   11:55pm         1:20am
Name                    Date            startTime     endTime
-------------------------------------------------------------
groupA;groupB;groupC    1/1/2019        9:00pm        1:20am
有没有办法有条件地连接行

条件如下:

  • 单位必须都是一样的
  • 单位日期必须全部相同
  • 单位时间必须彼此间隔20分钟-->这意味着,如果组A在晚上11:00结束,组B在晚上11:10开始,则会发生串联
因此,根据上述规则和上面的示例表和数据,连接将如下所示:

unitID  unitName unitGroupName  unitDate   unitStartTime   unitEndTime
--------------------------------------------------------------------------
1       unitA    groupA         1/1/2019   9:00pm          11:00pm
1       unitA    groupB         1/1/2019   11:10pm         11:45pm
1       unitA    groupC         1/1/2019   11:55pm         1:20am
Name                    Date            startTime     endTime
-------------------------------------------------------------
groupA;groupB;groupC    1/1/2019        9:00pm        1:20am
SQL可以实现这样的功能吗

这是我根据@Tigerjz32的答案使用的查询

DECLARE @value VARCHAR(max) = NULL
SELECT @value = COALESCE(@value + ';' + ug.unitGroupName, ug.unitGroupName)
SELECT @value as Name, 
       MIN(ue.unitDate) as unitDate, 
       MIN(ue.unitStartTime) as unitStartTime, 
       MIN(ue.unitEndTime)as unitEndTime,
       u.unitName
FROM unitEvents ue
LEFT JOIN unitGroups ug ON ug.unitID = ue.unitID
LEFT JOIN units u ON ug.unitID = u.unitID
WHERE u.unitYear = 2018
AND ue.eventWeek between '12/1/2018' and '12/7/2018'

谢谢

这是一个肮脏的方法。如果你想变得更优雅,你应该仔细研究


输入错误警报-它是串联的-而不是“contatenate”…我尝试了一下,它产生了以下错误:多部分标识符“u.unitName”无法绑定。我把这个问题添加到上面的问题中。谢谢请试试这个解决方案