MSSQL比较行相同的表

时间:2014-02-28 10:11:15

标签: sql-server

您好我想比较几行并检查某个条件是否为真/假。 这些表有几列,我感兴趣的是:

  • Events.Badgeno
  • Events.Name
  • Events.Date
  • Events.Time
  • Events.Region_id
  • Events.Data

区域ID可以是1或2。

我想在指定日期/时间差异的10分钟内检查相同的badgeno寄存器与不同地区的天气。 (可能是10分钟之前或10分钟之后)。

我希望显示没有针对2个地区的记录的记录。

进一步说明,它应该只在每天的徽章的第一个和最后一个记录内。 通常,每条记录在开头和结尾都应该有一个区域1和2记录。但是当天可能有多个地区1。

有关最佳方法的建议吗?

Id日期时间名称Badgeid Region

3385033 27/02/2014 08:16:11 FirstName姓氏5304 2

2 个答案:

答案 0 :(得分:0)

我觉得这样的事情会起作用

SELECT e.Badgeno,e.Name, e.Date, e.Time,e.Region_id, e.Data
FROM events e
INNER JOIN events e1 ON e1.BadgeNo = e.BadgeNo AND e1.Region_id <> e.RegionId AND DATEDIFF(minutes,e1.date + e1.time,e.date + e.time) > -10 AND DATEDIFF(minutes,e1.date + e1.time,e.date + e.time) < 10
WHERE e1.Region_id IS NULL

答案 1 :(得分:-1)

你应该提供样本数据。

  

此查询未完成,您可以尝试使用   row_number / rank / dense,partition和check因此编号列   生成。

select *,
row_number()over(partition by badgeno,regionno order by badge no)rn from table
where condition of date time