sql - SQL 选择其中两个不同的名称在一定时间内彼此
问题描述
嗨,我只需要在特定时间范围内找到两个名称的情况下返回值
Primary Start_Time NAME
A12345 22:00:00 FIRST
A12345 22:05:00 SECOND
A12345 21:00:00 FIRST
A12345 21:10:00 SECOND
A54321 21:00:00 FIRST
A54321 21:01:00 SECOND
在这种情况下,如果我们说他们需要返回 FIRST 和 SECOND 彼此在 5 分钟内发生的值,并且它们都具有相同的 Primary ID
SELECT Table1.Primary, Table1.START_TIME, Table2.NAME
FROM Table1 INNER JOIN
Table2 ON Table1.Table2_KEY = Table2.LINK
Where (Table2.NAME = 'First') or (Table2.NAME = 'Second')
解决方案
考虑 SQL LAG 函数。以下示例概括了您的问题,使其对更广泛的受众更加清晰和有用。
假设您连接的结果集名为“t”。以下示例为您提供了获得答案所需的内容...
select
*
,lag([Start_Time],1) over (partition by [Primary] order by [Primary],[Start_Time]) as PriorTime
,lag([Name],1) over (partition by [Primary] order by [Primary],[Start_Time]) as PriorName
from t
希望您可以从那里开始...即过滤时间差可以接受的小行,但这是下一步的一个示例...
select
*
,case when PriorName = 'FIRST' and [Name] = 'SECOND' then datediff(s,[Start_Time],[PriorTime]) else null end as TimeDiff
from
(
select
*
,lag([Start_Time],1) over (partition by [Primary] order by [Primary],[Start_Time]) as PriorTime
,lag([Name],1) over (partition by [Primary] order by [Primary],[Start_Time]) as PriorName
from t
) src
推荐阅读
- mysql - Aurora:根据主键查找两个表之间的差异
- ruby - 在正则表达式中执行减法
- javascript - 在 Wordpress 站点中进行 AJAX 调用的问题
- javascript - 隐藏相同的类 javascript
- c++ - 布局兼容类型的联合
- liquid - Liquid:为什么我会收到无效的整数错误
- azure-functions - 在 AuthorizationLevel 设置为“Function”的情况下进行本地测试时,Azure Function 命令行失败
- ruby-on-rails - 即使具有 CanCanCan 功能,也无法访问 Rails 中的操作
- mongodb - MongoDB根据多个条件从数组中选择
- java - 使用 java 8 从列表比较元素中删除