Tsql 对查询结果执行操作,而不保存表

Tsql 对查询结果执行操作,而不保存表,tsql,datetime,sql-order-by,calculated-columns,Tsql,Datetime,Sql Order By,Calculated Columns,我对SQL和T-SQL非常陌生,所以请原谅术语中的任何错误,或者如果答案很明显,我甚至不知道从哪里开始搜索这个问题的解决方案 我在T-SQL服务器上只有SELECT权限。我有一个查询,它根据一个具有开始日期(DATETIME)和结束日期(DATETIME)的事件提取一组信息。我希望在查询结果中有一个计算列,指示此人是否刚刚参与了背靠背事件 因此,类似这样的内容,“Back2Back”是所需的列: PersonID LastName StartDate E

我对SQL和T-SQL非常陌生,所以请原谅术语中的任何错误,或者如果答案很明显,我甚至不知道从哪里开始搜索这个问题的解决方案

我在T-SQL服务器上只有SELECT权限。我有一个查询,它根据一个具有开始日期(DATETIME)和结束日期(DATETIME)的事件提取一组信息。我希望在查询结果中有一个计算列,指示此人是否刚刚参与了背靠背事件

因此,类似这样的内容,“Back2Back”是所需的列:

PersonID    LastName    StartDate                EndDate                    Back2Back
006         Trevelyan   2019-12-01 09:30:00.000  2019-12-02 06:15:00.000    No
007         Bond        2019-12-01 12:15:00.000  2019-12-01 12:16:00.000    No
006         Trevelyan   2019-12-02 06:15:00.000  2019-12-02 15:15:00.000    Yes
如果有任何帮助或阻碍,则订单将按StartDate排序。

您可以使用该功能获取每个人先前事件的结束时间,并将其与当前事件的开始时间进行比较

SELECT
  *
 ,CASE
    WHEN StartDate = LAG(EndDate) OVER (PARTITION BY PersonID ORDER BY StartDate)
      THEN 'Yes'
    ELSE 'No'
  END AS Back2Back
FROM
  @mytable
ORDER BY
  StartDate;
结果:

+----------+-----------+-------------------------+-------------------------+-----------+
| PersonID | LastName  |        StartDate        |         EndDate         | Back2Back |
+----------+-----------+-------------------------+-------------------------+-----------+
|        6 | Trevelyan | 2019-12-01 09:30:00.000 | 2019-12-02 06:15:00.000 | No        |
|        7 | Bond      | 2019-12-01 12:15:00.000 | 2019-12-01 12:16:00.000 | No        |
|        6 | Trevelyan | 2019-12-02 06:15:00.000 | 2019-12-02 15:15:00.000 | Yes       |
+----------+-----------+-------------------------+-------------------------+-----------+
这假设“背对背”是相当字面的。如果你想在这个过程中积累一些时间,你可以使用比较而不是直接的等式