Tsql 对查询结果执行操作,而不保存表
我对SQL和T-SQL非常陌生,所以请原谅术语中的任何错误,或者如果答案很明显,我甚至不知道从哪里开始搜索这个问题的解决方案 我在T-SQL服务器上只有SELECT权限。我有一个查询,它根据一个具有开始日期(DATETIME)和结束日期(DATETIME)的事件提取一组信息。我希望在查询结果中有一个计算列,指示此人是否刚刚参与了背靠背事件 因此,类似这样的内容,“Back2Back”是所需的列: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
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 |
+----------+-----------+-------------------------+-------------------------+-----------+
这假设“背对背”是相当字面的。如果你想在这个过程中积累一些时间,你可以使用比较而不是直接的等式