比较表的记录并在sql server中过滤它们的数据

阿博法兹尔·达沃迪·尚迪兹

我有一个包含如下数据的表格:

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。

杰森·A·朗

假设您使用的是 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何比较SQL表中的记录

来自分类Dev

Oracle SQL比较表中的记录

来自分类Dev

SQL Server:查询以比较单个表中的记录并返回不匹配的记录

来自分类Dev

SQL比较同一表中的两列,并在另一表中更新

来自分类Dev

比较两个表并将记录与SQL Server过程中的状态合并

来自分类Dev

比较两个数据帧并根据它们在r中的值过滤值

来自分类Dev

删除重复的记录,并在sql的另一个表中插入delete的ID

来自分类Dev

从sql表中计数记录并在文本框中显示它

来自分类Dev

SQL查找表并在每个字段中创建一条记录

来自分类Dev

如何比较两个表的两列数据并在SQL中以百分比形式保存其差异

来自分类Dev

我应该将完整条件传递给要基于其过滤结果的Select SQL查询,还是只获取数据并在php中过滤它们?

来自分类Dev

SQL查询以比较单个表中彼此之间的记录行

来自分类Dev

SQL查询以比较单个表中彼此之间的记录行

来自分类Dev

比较2个表,并在考虑到年/月的情况下将丢失的记录添加到第一个表中

来自分类Dev

如何比较3个表并在mysql中合并它们的列

来自分类Dev

在 SQL Server 表中,如何根据对具有 JSON 值的列的 JSON 搜索过滤记录

来自分类Dev

用于比较 Excel 中的多个工作表并在新工作表中按升序显示它们的函数或代码

来自分类Dev

如何比较SQL Server中2个不同表中单元格中的数据?

来自分类Dev

SQL Server:根据TVP表的值删除表中的记录

来自分类Dev

sql server 在数据库中存储比较运算符并在 case 语句中使用

来自分类Dev

如何按小时过滤sql server中的数据库数据

来自分类Dev

在reactjs中过滤表数据

来自分类Dev

从表中获取过滤数据

来自分类Dev

从SQL Server中单个表的数据比较两个不同时期

来自分类Dev

如何比较同一张表中的记录列?

来自分类Dev

在表中插入新记录之前比较日期时间

来自分类Dev

如何快速比较一个表中的记录?

来自分类Dev

在数据表中,比较行并在 R 中进行无循环计算

来自分类Dev

比较2个大表(SQL Server)

Related 相关文章

  1. 1

    如何比较SQL表中的记录

  2. 2

    Oracle SQL比较表中的记录

  3. 3

    SQL Server:查询以比较单个表中的记录并返回不匹配的记录

  4. 4

    SQL比较同一表中的两列,并在另一表中更新

  5. 5

    比较两个表并将记录与SQL Server过程中的状态合并

  6. 6

    比较两个数据帧并根据它们在r中的值过滤值

  7. 7

    删除重复的记录,并在sql的另一个表中插入delete的ID

  8. 8

    从sql表中计数记录并在文本框中显示它

  9. 9

    SQL查找表并在每个字段中创建一条记录

  10. 10

    如何比较两个表的两列数据并在SQL中以百分比形式保存其差异

  11. 11

    我应该将完整条件传递给要基于其过滤结果的Select SQL查询,还是只获取数据并在php中过滤它们?

  12. 12

    SQL查询以比较单个表中彼此之间的记录行

  13. 13

    SQL查询以比较单个表中彼此之间的记录行

  14. 14

    比较2个表,并在考虑到年/月的情况下将丢失的记录添加到第一个表中

  15. 15

    如何比较3个表并在mysql中合并它们的列

  16. 16

    在 SQL Server 表中,如何根据对具有 JSON 值的列的 JSON 搜索过滤记录

  17. 17

    用于比较 Excel 中的多个工作表并在新工作表中按升序显示它们的函数或代码

  18. 18

    如何比较SQL Server中2个不同表中单元格中的数据?

  19. 19

    SQL Server:根据TVP表的值删除表中的记录

  20. 20

    sql server 在数据库中存储比较运算符并在 case 语句中使用

  21. 21

    如何按小时过滤sql server中的数据库数据

  22. 22

    在reactjs中过滤表数据

  23. 23

    从表中获取过滤数据

  24. 24

    从SQL Server中单个表的数据比较两个不同时期

  25. 25

    如何比较同一张表中的记录列?

  26. 26

    在表中插入新记录之前比较日期时间

  27. 27

    如何快速比较一个表中的记录?

  28. 28

    在数据表中,比较行并在 R 中进行无循环计算

  29. 29

    比较2个大表(SQL Server)

热门标签

归档