【发布时间】:2021-06-09 05:37:58
【问题描述】:
我有一个包含很多行的表,其中有几个与大图相关的标识符,但在我当前的任务中,只有 3 列是重要的:
SiteIdentifier | SysTm | Signalet
SiteIdentifier 是一个数字,SysTm 是 DateTime,Signalet 是一个文本字段。 防爆数据:
587451 | 2021-03-01 00:00:00 | Left
587451 | 2021-03-04 07:12:17 | Joined
214537 | 2021-03-05 02:13:03 | Left
587451 | 2021-03-04 12:12:12 | Left
214537 | 2021-03-05 07:13:00 | Joined
587451 | 2021-03-08 01:04:07 | Joined
这是我想要实现的目标: 我想创建一个可以显示的查询:
SiteIdentifier | SysTm of last Signalet Left | SysTm of last Signalet Joined | DATEDIFF(hour, ... between last Left and Joined
在示例数据行的情况下,结果将是: 获取每个 SiteIdentifier 的每个实例很重要
587451 | 2021-03-01 00:00:00 | 2021-03-04 07:12:17 | 79
214537 | 2021-03-05 02:13:03 | 2021-03-05 07:13:00 | 5
587451 | 2021-03-04 12:12:12 | 2021-03-08 01:04:07 | 84
(每个 SiteIdentifier 可以表示 NUMEROUS 次)
这些行都包含在一个表中,这让我很头疼...
我之前问过这个问题,得到了这个查询:
SELECT SiteIdentifier,
MAX(CASE WHEN Signalet = 'Left' THEN SysTM END) as left_tm,
MAX(CASE WHEN Signalet = 'Joined' THEN SysTM END) as Joined_tm,
DATAEDIFF(hour,
MAX(CASE WHEN Signalet = 'Left' THEN SysTM END),
MAX(CASE WHEN Signalet = 'Joined' THEN SysTM END)
) as time_diff
FROM Table
WHERE Signalet IN ( 'Left', 'Joined')
GROUP BY SiteIdentifier
ORDER BY SiteIdentifier
此查询为我提供了每个 SiteIdentifier 的最新“行”,但不是所有结果。 我试图让结果是,正如我上面写的,一个 SiteIdentifier 可以被多次表示。
【问题讨论】:
-
我建议为您的样例数据提供DDL+DML,方便我们协助。
标签: sql sql-server tsql merge