我有一个包含如下数据的表格:
PersonalID | Date
193 | 2017-06-01 08:02:00
193 | 2017-06-01 08:03:00
193 | 2017-06-01 08:03:00
193 | 2017-06-01 08:04:00
193 | 2017-06-01 08:09:00
193 | 2017-06-01 09:01:00
193 | 2017-06-01 09:06:00
193 | 2017-06-01 09:08:00
我想选择日期差异大于 10 分钟的所有记录。
例如,根据此数据,我想显示日期为“2017-06-01 08:02:00”和“2017-06-01 09:01:00”的记录并忽略其他记录。
我可以通过不同的关键字忽略重复记录(具有相同日期),但我不知道如何比较记录并选择日期差异大于 10 分钟的记录。
我使用这个查询来实现这一点,但它返回错误的记录。
declare @space int = 10;
with aaa as (select main.ID, main.PersonalID, main.Date
from HZG_Traffic main
where exists(select * from HZG_Traffic tr
where tr.PersonalID = main.PersonalID and
ABS(DATEDIFF(MI, main.Date,tr.Date)) < @space and
ABS(DATEDIFF(MI, main.Date, tr.Date)) <> 0)
and main.PersonalID = 193)
Select * from aaa
where id not in
(select
MIN(ID)
from aaa
group by
PersonalID,
DATEPART(DAY, Date), DATEPART(MONTH, Date), DATEPART(YEAR, Date),
DATEPART(HOUR, Date))
order by Date desc
你能帮助我还是你对这个问题有更好的主意?
谢谢
更新:
感谢您的解决方案,我正在使用 SQL Server 2014。
假设您使用的是 SQL Server 2012 或更高版本,您可以使用 LAG & LEAD 函数...
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
CREATE TABLE #TestData (
PersonalID INT NOT NULL,
SomeDate DATETIME2(0) NOT NULL
);
INSERT #TestData (PersonalID, SomeDate) VALUES
(193, '2017-06-01 08:02:00'),
(193, '2017-06-01 08:03:00'),
(193, '2017-06-01 08:03:00'),
(193, '2017-06-01 08:04:00'),
(193, '2017-06-01 08:09:00'),
(193, '2017-06-01 09:01:00'),
(193, '2017-06-01 09:06:00'),
(193, '2017-06-01 09:08:00');
-- SELECT * FROM #TestData td;
--==================================================
WITH
cte_LagLead AS (
SELECT
td.PersonalID, td.SomeDate,
LagMins = ABS(DATEDIFF(MINUTE, td.SomeDate, LAG(td.SomeDate, 1, td.SomeDate) OVER (PARTITION BY td.PersonalID ORDER BY td.SomeDate))),
LeadMins = DATEDIFF(MINUTE, td.SomeDate, LEAD(td.SomeDate, 1, td.SomeDate) OVER (PARTITION BY td.PersonalID ORDER BY td.SomeDate))
FROM
#TestData td
)
SELECT
ll.PersonalID, ll.SomeDate
FROM
cte_LagLead ll
WHERE
ll.LagMins > 10
OR
ll.LeadMins > 10;
结果...
PersonalID SomeDate
----------- ---------------------------
193 2017-06-01 08:09:00
193 2017-06-01 09:01:00
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句