对查询结果执行操作,不保存 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
比较而不是直接相等。
我是 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
比较而不是直接相等。