对查询结果执行操作,不保存 table

Performing an operation on the result of a query, without saving a table

我是 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

ORDER BY 将在 StartDate 之前,如果这有帮助或阻碍的话。

您可以使用LAG 函数获取每个人上一个事件的结束时间,并将其与当前事件的开始时间进行比较。

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       |
+----------+-----------+-------------------------+-------------------------+-----------+

这假设 "back to back" 非常直白。如果你想在其中增加一些时间,你可以使用 DATEDIFF 比较而不是直接相等。